2011-05-21 14 views
36

मैं asp.net में भौतिक पथ से सापेक्ष वर्चुअल पथ कैसे प्राप्त कर सकता हूं? रिवर्स विधि नीचे की तरह है:भौतिक पथ से संबंधित आभासी पथ प्राप्त करना

Server.MapPath("Virtual Path Here"); 

लेकिन ऊपरी विधि के विपरीत क्या है?

+8

विचार करें कि आईआईएस में कई वर्चुअल निर्देशिका एक ही भौतिक निर्देशिका में मैप कर सकती हैं, यहां तक ​​कि एक ही एप्लिकेशन में भी। फिर इस सवाल का उत्तर कैसे दिया जा सकता है? –

उत्तर

32

शायद this question वह है जिसे आप ढूंढ रहे हैं। वहाँ वे सुझाव देते हैं:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty); 
22
public static string MapPathReverse(string fullServerPath) 
    {    
     return @"~\" + fullServerPath.Replace(HttpContext.Current.Request.PhysicalApplicationPath,String.Empty); 
    } 
+0

यह काम करता है लेकिन मेरे मामले में PhysicalApplicationPath किसी कारण से कम मामले में था लेकिन मेरे पूर्ण सर्वरपैथ में पथ फ़ाइल सिस्टम से पढ़ा नहीं गया था। चूंकि विंडोज़ में केस असंवेदनशील पथ नहीं हैं, इसलिए संभवतः इसे सभी को कम मामले –

8

तुम भी कुछ इस तरह कर सकता है:

string relativePath = absolutePath.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/"); 

लाभ यह है कि आप HttpContext.Current.Request जरूरत नहीं है, है।

+0

में परिवर्तित करना ठीक है क्योंकि यह वास्तव में उल्लेख किया गया एक बेहतर उत्तर है क्योंकि आपको अनुरोध ऑब्जेक्ट की आवश्यकता नहीं है। –

9
Request.ServerVariables["APPL_PHYSICAL_PATH"] 

ठीक है, लेकिन हमेशा नहीं। यह केवल तभी उपलब्ध होता है जब कोई HTTP अनुरोध हो।

दूसरी ओर कॉल

HostingEnvironment.ApplicationPhysicalPath 

हमेशा उपलब्ध है।

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