2009-06-01 23 views
109

मुझे में संग्रहीत कुछ फ़ाइलों के पथ को गठबंधन करने के लिए Server.MapPath() का उपयोग करने की आवश्यकता है।मैं global.asax से Server.MapPath() का उपयोग कैसे कर सकता हूं?

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

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

वहाँ एक और तरीका है कि पूर्ण शारीरिक C:\inetpub\wwwroot\project\App_data\ के रूप में इस तरह के रास्ते पर एक वेब जड़ रिश्तेदार ~/App_Data/ के रूप में ऐसी निर्देशिका मैप कर सकते हैं है?

उत्तर

266

आप System.Web.Hosting.HostingEnvironment.MapPath() को आजमा सकते हैं।

कोई HttpContext आवश्यक है।

+0

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

+9

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

+1

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

-3

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

context.Server.mappath()

प्रसंग आप भी सत्र संग्रह, अनुरोध वस्तु तक पहुंचने देता है, प्रतिक्रिया ऑब्जेक्ट:

+2

आप इसे ऐसे वर्गों में संदर्भित कर सकते हैं जो वास्तव में एक HttpContext है, लेकिन मुझे नहीं लगता कि global.asax में एक है, इसलिए मुझे प्राप्त त्रुटि संदेश है। –

1

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

+0

Global.asax में कोई गारंटी नहीं है 'संदर्भ'। –

3

AppDomain.CurrentDomain.BaseDirectory का उपयोग करें क्योंकि Context शून्य वापस आ सकता है !!

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