मैं Global.asax से Server.MapPath () का उपयोग कैसे कर सकता हूं?


122

मुझे Server.MapPath()कुछ फ़ाइल पथ को संयोजित करने के लिए उपयोग करने की आवश्यकता है जो मैं स्टोर करता हूं web.config

हालांकि, चूंकि Server.MapPath()मौजूदा HttpContext (मुझे लगता है) पर निर्भर करता है, मैं ऐसा करने में असमर्थ हूं। विधि का उपयोग करने की कोशिश करते हुए, भले ही इसके "उपलब्ध" होने पर, मुझे निम्नलिखित अपवाद मिलें:

सर्वर ऑपरेशन इस संदर्भ में उपलब्ध नहीं है।

क्या कोई अन्य विधि है जो किसी वेब रूट सापेक्ष निर्देशिका ~/App_Data/को पूर्ण भौतिक पथ जैसे कि मैप कर सकती है C:\inetpub\wwwroot\project\App_data\?

जवाबों:


295

आप System.Web.Hosting.HostingEnvironment.MapPath () की कोशिश कर सकते हैं ।

कोई HttpContext की आवश्यकता नहीं है।


इस तकनीक के लिए कोई चेतावनी?
जॉन Bubriski

10
नहीं। यदि आप रिफ्लेक्टर को फायर करते हैं, तो आप देखेंगे कि Server.MapPath और Request.MapPath अंततः VirtualPath.MapPath को कॉल करते हैं, जो अंततः HostingEnvironment.MapPath को कॉल करता है। वे सभी एक ही स्थान पर समाप्त होते हैं। HostingEnvironment.MapPath ने बीच के आदमी को काट दिया।
कॉर्बिन मार्च

1
+1 इसने एक ओपन सोर्स प्रोजेक्ट तय किया जो मेरे लिए काम कर रहा था, बस HttpContext.Current.Server के कारण इनिशियलाइज़ करना बंद कर दिया। इसके लिए किसी कारण से संदर्भ नहीं होना। यह करने के लिए स्विचन यह चिकनी नौकायन के लिए वापस डाल दिया।
बजे क्रिस मैरिसिक


1

Global.asax में, संदर्भ ऑब्जेक्ट का उपयोग करें :

context.Server.mappath ()

संदर्भ आपको सत्र संग्रह, अनुरोध ऑब्जेक्ट, प्रतिक्रिया ऑब्जेक्ट तक भी पहुंचने देता है। उदाहरण के लिए, जब आप त्रुटियों को लॉग करना चाहते हैं तो बहुत उपयोगी है


ContextGlobal.asax में इसकी कोई गारंटी नहीं है ।
एंडर्स तोर्ब्लाड

-3

आप HttpContext.Current.Server.MapPath ("/") की कोशिश कर सकते हैं - यही कारण है कि मैंने इसे कक्षाओं में पहले संदर्भित किया है।


2
आप इसे उन वर्गों में संदर्भित कर सकते हैं जो वास्तव में एक HttpContext है, लेकिन मुझे नहीं लगता कि Global.asax में एक है, इसलिए मुझे प्राप्त त्रुटि संदेश।
जॉन Bubriski
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.