在ASP.NET MVC的静态字段内使用Server.MapPath()


116

我正在建立一个ASP.NET MVC网站,在其中使用Lucene.Net进行搜索查询。我在这里问了一个有关如何在ASP.NET MVC应用程序中正确构造Lucene.Net用法的问题,并被告知最好的方法是将my声明为IndexWriteras 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.get”需要对象引用。

有没有一种方法可以使用Server.MapPath()或类似的静态字段?如何解决此错误?

Answers:


240

试试看HostingEnvironment.MapPath,这是static

请参阅此SO问题以进行确认,HostingEnvironment.MapPath该确认返回的值与Server.MapPath以下内容相同: Server.MapPath和HostingEnvironment.MapPath有什么区别?


这个函数给了我一个错误,因为HostingEnvironment.MapPath拒绝了结果。Server.MapPath与Server.MapPath不同,后者返回的是绝对网址,而不是相对网址
John

@john,我两者的价值相同。
ps2goat 2014年

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()

解决方案(在静态web方法中测试)

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


1
我唯一看到更新中提到的错误是当代码使用相对虚拟路径时。例如,Server.MapPath()允许路径为“ files / file1.doc”。例如,它使用当前上下文确定当前页面的路径,然后从此处创建相对路径。如果我们在~/Subfolder/Page1.aspx,则该网址将从映射~/Subfolder/files/file1.doc。该HostingEnviornment.MapPath()是静态的,因此总是需要完整的虚拟路径,首先是~/URL的一部分。
ps2goat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.