MVC3

2011-09-29 10 views
23

में Server.MapPath का उपयोग करते हुए मैं कोडMVC3

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName 

यह रिटर्न

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

मैं क्यों ServiceController, SERVICENAME के लिए पथ हो रही है? मैं App_Data करने के लिए पथ, जिसमें

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

उत्तर

57

आपको लगता है कि आप वर्चुअल जड़ से शुरू करना चाहते हैं निर्दिष्ट करने की आवश्यकता है चाहता हूँ:

string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName); 

इसके अतिरिक्त, यह पथ गठबंधन करने के लिए Path.Combine उपयोग करने के लिए बेहतर अभ्यास है समेकित तारों की बजाय। Path.Combine यह सुनिश्चित करेगा कि आप डबल-पथ विभाजक के साथ किसी स्थिति में समाप्त नहीं होंगे।

संपादित:

आप "पूर्ण" और "सापेक्ष" पथ को परिभाषित और कैसे वे करने के लिए "भौतिक" और "आभासी" रास्तों की तुलना कर सकते हैं?

एमएसडीएन के पास सापेक्ष, भौतिक और आभासी पथ पर good explanation है। वहां एक नज़र डालें।

+0

यह काम करता है। मैं "वर्चुअल रूट" के बारे में एक लेख पढ़ रहा था, लेकिन मैंने इसका पालन नहीं किया। http://www.dotnetperls.com/mappath क्या आप "पूर्ण" और "सापेक्ष" पथ परिभाषित कर सकते हैं और वे "भौतिक" और "आभासी" पथों की तुलना कैसे करते हैं? –

+1

@ पी। ब्रायन। मैकी: निरपेक्ष अर्थ रूट से पथ है, जैसे "/ someTopDirectory/someSubDirectory"। सापेक्ष का मतलब है कि आप वर्तमान में कहां से हैं, इसलिए यदि आप "कुछ सबबॉरेक्टरी" में हैं और "कुछ टॉप डायरेक्टरी" प्राप्त करना चाहते हैं, तो एक सापेक्ष पथ ".." (एक निर्देशिका ऊपर जाएं)। भौतिक पथ पथ हैं क्योंकि सिस्टम उन्हें देखता है: "सी: \ inetpub \ myApp \ someTopDirectory \ someSubDirectory"। वर्चुअल पथ एक वेब सर्वर अनुप्रयोग के रूप में हैं उन्हें देखता है: "/ someTopDirectory/someSubDirectory"। –

+0

@ पी। ब्रायन। मैकी: अपनी स्थिति के लिए और अधिक स्पष्ट करने के लिए, मैपपाथ एक आभासी पथ को भौतिक पथ में परिवर्तित करता है। वर्चुअल पथ के लिए अपने पैरामीटर में, आप एक रिश्तेदार के बजाय एक पूर्ण पथ प्रदान करना चाहते हैं। वेब अनुप्रयोग में पूर्ण पथ के लिए "रूट" इंगित करने वाला मार्कर "~" है, इसलिए पूर्ण वर्चुअल रूट = "~ /"। –

0

इस (@"~/App_Data") की तरह करने का प्रयास करें। ~/ रूट निर्देशिका का प्रतिनिधित्व करता है।

AppDomain.CurrentDomain.GetData("DataDirectory").ToString() 

यह अभी भी App_Data निर्देशिका में फाइल पथ वापस आ जाएगी:

6

अब तक दिए गए उत्तर के लिए आप क्या देख रहे हैं, लेकिन मुझे लगता है कि अपने विशेष मामले में, आप वास्तविक जरूरत यह है यदि वह निर्देशिका नाम एमवीसी या एएसपी.नेट के भविष्य के संस्करणों में बदलता है।

+0

मुझे नहीं लगता कि यह एक विशेष रूप से अच्छा विचार है। आप एक अनियंत्रित (आधिकारिक तौर पर) AppDomain पैरामीटर पर भरोसा कर रहे हैं, यह एक कार्यान्वयन विस्तार है। यह 'App_Data' से बदलने की संभावना अधिक है। – vcsjones

+0

यह दस्तावेज और मानक है, लेकिन यह ADO.Net के लिए है, विशेष रूप से एएसपी.Net नहीं। 'DataDirectory' नहीं बदलेगा लेकिन यह हमेशा 'App_Data' को इंगित नहीं कर सकता है। – codekaizen