2012-09-02 6 views
36

मैं एएसपी.नेट एमवीसी 4 एप्लिकेशन की रूट निर्देशिका से संबंधित पथ कैसे हल करूं? यही है, मैं नियंत्रक कार्यों से आवेदन से संबंधित फाइलें खोलना चाहता हूं, ~/Data/data.html जैसे संदर्भित। ये पथ आमतौर पर Web.config में निर्दिष्ट होते हैं।मैं एएसपी.नेट एमवीसी 4 एप्लिकेशन रूट से संबंधित पथ को कैसे हल करूं?

संपादित करें:

'संकल्प' मैं एक पूर्ण पथ, .e.g करने के लिए आवेदन के मूल में एक पथ रिश्तेदार को बदलने के लिए मतलब द्वारा। ~/Data/data.htmlC:\App\Data\Data.html

+1

इस तरह आप रूट से उन फ़ाइलों को 'संदर्भ' प्राप्त करते हैं ... –

+0

@Nate आपका क्या मतलब है, ~ स्वचालित रूप से विस्तारित हो जाता है? – aknuds1

+0

[HttpContext.Current.Server.MapPath] (http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.mappath.aspx)? – nemesv

उत्तर

68

निरपेक्ष पथ उपयोग प्राप्त करने के लिए इस:

String path = HttpContext.Current.Server.MapPath("~/Data/data.html"); 

संपादित करें:

नियंत्रक संदर्भ ऊपर लाइन से हटा दें .Current प्राप्त करने के लिए। HttpContext का उपयोग करके स्वयं परीक्षण करना आसान है क्योंकि यह नियंत्रक के संदर्भ पर आधारित है इसलिए अधिक स्थानीयकृत।

मैं अब एहसास मैं नापसंद है कि कैसे काम करता है Server.MapPath (आंतरिक अंत में कहता है HostingEnvironment.MapPath) तो मैं अब हमेशा HostingEnvironment.MapPath उपयोग करने के लिए है क्योंकि इसके स्थिर और संदर्भ पर निर्भर नहीं जब तक कि बेशक आपको लगता है कि चाहते हैं की सिफारिश ...

+0

मैं बस सर्वर पर फ़ाइल को पढ़ना चाहता हूं, इसे क्लाइंट में वापस नहीं किया जाना है। – aknuds1

+0

यह करने का यह तरीका है। साथ ही, यदि आपको इसे स्थिर रूप से उपयोग करने की आवश्यकता है, तो यह प्रश्न देखें: http: // stackoverflow।कॉम/प्रश्न/37 9 5 9 86/उपयोग-सर्वर-मैपथ-इन-ए-स्टेटिक-फील्ड-इन-एएसपी-नेट-एमवीसी –

+0

मैं सिस्टम की एक गैर-स्थैतिक विधि में हूं। वेब.एमसीसी नियंत्रक सबक्लास, लेकिन ' HttpContext' की कोई संपत्ति 'Current' नहीं है। क्या हो रहा है? – aknuds1

4

कार्रवाई में आप कॉल कर सकते हैं:

this.Request.PhysicalPath 

कि मौजूदा नियंत्रक के संदर्भ में भौतिक पथ देता है। आप केवल रूट पथ कॉल की जरूरत है:

this.Request.PhysicalApplicationPath 
10

बस का उपयोग निम्न

Server.MapPath("~/Data/data.html") 
+0

सरल और सही। धन्यवाद। – CodeBreaker

47

मैं जब मैं एक नियंत्रक, के बाहर एक पथ की जरूरत है जैसे कि जब मैं Global.asax.cs में घटकों आरंभ कर रहा हूँ के रूप में इस कोड उपयोगी पाते हैं:

HostingEnvironment.MapPath("~/Data/data.html") 
+1

होस्टिंगइन्वायरमेंट। मैपपाथ एक बेहतर जवाब है। जब आप http अनुरोध के संदर्भ के बाहर कोड निष्पादित करते हैं तो HttpContext.Current शून्य है और आपका कोड क्रैश हो जाता है। HostingEnvironment.MapPath हमेशा काम करता है। – JDC

+0

यह भी उल्लेखनीय है कि "होस्टिंगइन्वायरमेंट। मैपपाथ" को अनुकूलित किया जा सकता है यदि आपके पास वर्चुअल पथ प्रदाता का अपना कार्यान्वयन है। किसी भी "होस्टेड" वातावरण (विंडोज़ सेवा या आईआईएस होस्टेड) ​​में काम करता है https://support.microsoft.com/en-us/kb/910441 – Rikki

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