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

我正在构build一个ASP.NET MVC网站,我正在使用Lucene.Net进行search查询。 我在这里提出了一个关于如何在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.get”

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

提前致谢。

尝试HostingEnvironment.MapPath ,它是static

看到这个SO问题,以确认HostingEnvironment.MapPath返回与Server.MapPath相同的值: Server.MapPath和HostingEnvironment.MapPath有什么区别?

我想你可以试试这个从class上打电话

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

* —————-对不起,我忽略了,因为静态函数已经通过adrift *

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

更新

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

详细信息:System.ArgumentException:相对虚拟path“SignatureImages”不允许在这里。 在System.Web.VirtualPath.FailIfRelativePath()

解决scheme(在静态webmethod中testing)

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