ASP.NET MVC में एक स्थिर फ़ील्ड के अंदर Server.MapPath () का उपयोग करना


116

मैं ASP.NET MVC साइट बना रहा हूँ जहाँ मैं खोज प्रश्नों के लिए Lucene.Net का उपयोग कर रहा हूँ। मैं यहाँ एक प्रश्न पूछा कैसे ठीक एक ASP.NET MVC आवेदन में Lucene.Net उपयोग की संरचना करने के बारे में और बताया गया था कि सबसे अच्छा तरीका मेरी घोषित करने के लिए है IndexWriterके रूप में public static, तो यह हो सकता है कि फिर से इस्तेमाल किया।

यहाँ कुछ कोड है जो मेरे SearchController के शीर्ष पर है:

public static string IndexLocation = Server.MapPath("~/lucene");
public static Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
public static IndexWriter writer = new IndexWriter(IndexLocation,analyzer);

जैसा writerकि स्थिर है, स्थिर IndexLocationहोना भी चाहिए। इस प्रकार, संकलक मुझे निम्नलिखित त्रुटि दे रहा है Server.MapPath():

गैर-स्थैतिक क्षेत्र, विधि या संपत्ति के लिए एक ऑब्जेक्ट संदर्भ की आवश्यकता होती है 'System.Web.Mvc.Controller.Server.it "

क्या Server.MapPath () या स्थिर क्षेत्र से समान कुछ का उपयोग करने का एक तरीका है ? मैं इस त्रुटि को कैसे ठीक कर सकता हूं?

जवाबों:


240

कोशिश करो HostingEnvironment.MapPath, जो है static

पुष्टि के लिए यह SO प्रश्न देखें HostingEnvironment.MapPathजो समान मान लौटाता है Server.MapPath: Server.MapPath और HostingEnvironment.MapPath में क्या अंतर है?


इस फ़ंक्शन ने मुझे एक त्रुटि प्रदान की, जिसके परिणामस्वरूप HostingEnvironment.MapPath द्वारा पुनर्प्राप्त किया गया। Server.MapPath के समान नहीं है, बाद वाला एक पूर्ण url नहीं एक रिश्तेदार url लौटाता है
John

@ जॉन, मुझे दोनों के लिए समान मूल्य मिलता है।
ps2goat

45

मुझे लगता है कि आप क्लास से कॉल करने के लिए यह कोशिश कर सकते हैं

 System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");

* ---------------- माफ करना, मैं निरीक्षण, स्थिर समारोह के लिए पहले से ही सवाल का जवाब दे भटकते हुए द्वारा *

System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

अपडेट करें

उपयोग करते समय मुझे अपवाद मिला System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

पूर्व विवरण: System.ArgumentException: संबंधित वर्चुअल पथ 'SignatureImages' को यहां अनुमति नहीं है। System.Web.VirtualPath.FailIfRelativePath () पर

समाधान (स्थिर webmethod में परीक्षण)

System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/"); काम


1
आपके द्वारा अपने अपडेट में बताई गई त्रुटि को केवल उसी समय देखा गया जब कोड ने किसी सापेक्ष वर्चुअल पथ का उपयोग किया हो। उदाहरण के लिए, Server.MapPath()"files / file1.doc" के पथ की अनुमति देता है। उदाहरण के लिए, वर्तमान पृष्ठ के पथ को निर्धारित करने के लिए यह वर्तमान संदर्भ का उपयोग करता है, और फिर वहां से सापेक्ष पथ बनाता है। यदि हम अंदर हैं ~/Subfolder/Page1.aspx, तो url से मैप होगा ~/Subfolder/files/file1.docHostingEnviornment.MapPath()स्थिर है, और इस तरह हमेशा पूर्ण आभासी पथ की आवश्यकता है, के साथ शुरू ~/यूआरएल का हिस्सा है।
ps2goat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.