2010-09-25 10 views
85

में एक स्थिर फ़ील्ड के अंदर Server.MapPath() का उपयोग कर मैं एक एएसपी.नेट एमवीसी साइट बना रहा हूं जहां मैं खोज क्वेरी के लिए Lucene.Net का उपयोग कर रहा हूं। मैं asked a question here एएसपी.नेट एमवीसी अनुप्रयोग में ल्यूसीननेट उपयोग को सही ढंग से कैसे व्यवस्थित करने के बारे में बताया गया था और कहा गया था कि मेरी IndexWriter को public static के रूप में घोषित करने का सबसे अच्छा तरीका है, ताकि इसका पुन: उपयोग किया जा सके।ASP.NET MVC

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 भी स्थिर होने चाहिए:

यहाँ कुछ कोड मेरी SearchController के शीर्ष पर है। इस प्रकार, संकलक मुझे Server.MapPath() के लिए निम्नलिखित त्रुटि दे रहा है:

एक वस्तु संदर्भ गैर स्थिर क्षेत्र, विधि, या संपत्ति 'System.Web.Mvc.Controller.Server.get'

के लिए आवश्यक है

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

अग्रिम धन्यवाद।

उत्तर

198

HostingEnvironment.MapPath का प्रयास करें, जो static है। कि HostingEnvironment.MapPathServer.MapPath रूप में एक ही मान देता है

पुष्टि करने के लिए इस तो सवाल यह देखें: What is the difference between Server.MapPath and HostingEnvironment.MapPath?

+0

इस समारोह मुझे HostingEnvironment.MapPath द्वारा returbed परिणाम के रूप में एक त्रुटि दे दी है नहीं Server.MapPath के समान, बाद वाला एक पूर्ण यूआरएल रिश्तेदार यूआरएल – John

+0

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

28

मुझे लगता है कि आप एक वर्ग

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

* से में फोन करने के लिए इस कोशिश कर सकते हैं ----- ----------- माफ करना मैं निरीक्षण करता हूं, स्थिर कार्य के लिए पहले से ही adrift *

System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/"); 
द्वारा प्रश्न का उत्तर दिया गया है System.ArgumentException:: रिश्तेदार आभासी पथ 'SignatureImages' यहाँ की अनुमति नहीं है

अद्यतन

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

पूर्व विवरण का उपयोग करते समय मैं अपवाद मिला है। System.Web.VirtualPath.FailIfRelativePath()

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

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

+1

एक बार जब मैंने आपके अपडेट में उल्लिखित त्रुटि देखी, तो कोड तब एक सापेक्ष आभासी पथ का उपयोग करता था। उदाहरण के लिए, 'Server.MapPath()' "फ़ाइलों/file1.doc" के पथ की अनुमति देता है। यह वर्तमान पृष्ठ के पथ को निर्धारित करने के लिए वर्तमान संदर्भ का उपयोग करता है, उदाहरण के लिए, और फिर वहां से संबंधित पथ बनाता है। अगर हम '/ Subfolder/Page1.aspx' में हैं, तो यूआरएल' ~/सबफ़ोल्डर/फाइल/file1.doc' से मैप करेगा। 'HostingEnviornment.MapPath()' स्थिर है, और इस प्रकार यूआरएल के '~/'भाग से शुरू होने पर हमेशा पूर्ण आभासी पथ की आवश्यकता होती है। – ps2goat

+0

मैंने इसका इस्तेमाल किया और इसमें कोई संदेह नहीं है कि यह काम नहीं करेगा। –