2011-03-22 11 views
5

मैं जेनेरिक .ashx हैंडलर के भीतर से ब्राउज़र के लिए उपयुक्त पथ में फ़ाइल के वर्चुअल पथ को कैसे हल कर सकता हूं?एएसपी.नेट: जेनेरिक हैंडलर से फ़ाइल का वर्चुअल पथ कैसे प्राप्त करें?

उदा।

~/asp/ClockState.aspx 

में

/NextAllowed/asp/ClockState.aspx 

तो मैं एक वेबफ़ॉर्म Page थे, मैं कह सकते हैं ResolveUrl: मैं परिवर्तित करना चाहते हैं

Page.ResolveUrl("~/asp/ClockState.aspx") 

जो करने के लिए हल करता है:

/NextAllowed/asp/ClockState.aspx 

लेकिन मैं एक वेबफॉर्म पेज नहीं हूं, मैं एक सामान्य हैंडलर हूं। तुम्हें पता है, सभी प्रकार की चीजों के साथ IHttpHandler वस्तु इंजेक्शन कि:

public class ResetClock : IHttpHandler 
{ 
    public void ProcessRequest (HttpContext context) 
    { 
     //[process stuff] 

     //Redirect client 
     context.Response.Redirect("~/asp/ClockState.aspx", true); 
    } 

    public bool IsReusable { get { return false; } } 
} 

उत्तर

7

ऐसा करने के लिए VirtualPathUtility वर्ग का उपयोग कर सकते हैं। इसमें पथ के साथ काम करने के लिए विभिन्न विधियां हैं। आपको जिसकी आवश्यकता है वह ToAbsolute() है, जो एक सापेक्ष पथ को पूर्ण रूप से परिवर्तित करेगा।

var path = VirtualPathUtility.ToAbsolute("~/asp/ClockState.aspx"); 

लेकिन, आप वैसे भी Response.Redirect कॉल में टिल्ड उपयोग कर सकते हैं, तो निम्नलिखित हैं अभी भी काम:

Response.Redirect("~/asp/ClockState.aspx"); 

आप रिस्पांस उपयोग करने से पहले एक पूर्ण पथ के लिए URL परिवर्तित करने के लिए की जरूरत नहीं है .Redirect।

+0

मैंने सोचा कि मैंने बस 'Response.Redirect (...)' की कोशिश की थी और यह 'वर्चुअल फ़ोल्डर को ध्यान में रखे' नहीं था। लेकिन 'वर्चुअलपाथ यूटिलिटी' और सिर्फ 'रीडायरेक्ट' दोनों काम। +1 स्वीकार किया गया। –

संबंधित मुद्दे