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

我正在建立一个 ASP.NET MVC 网站,在那里我使用 Lucene。用于搜索查询的 Net。关于如何正确构造 Lucene。NET MVC 应用程序中的 Net 使用情况,并被告知最好的方法是将 my 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);

As writer is static, IndexLocation must also be static. Thus, the compiler is giving me the following error for Server.MapPath():

非静态字段、方法或属性‘ System.Web.Mvc.Controller.Server.get’需要对象引用

Is there 一种使用 Server.MapPath ()或类似静态字段的方法? How can I fix this error?

134763 次浏览

试试 HostingEnvironment.MapPath就是 static

See this SO question for confirmation that HostingEnvironment.MapPath returns the same value as Server.MapPath: 服务器和主机环境之间的区别是什么?

我想你可以试试这样从课堂上打电话进来

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

* 漂泊着 *

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

更新

我在使用 System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");时遇到了异常

详细信息: System.ArgumentException: 此处不允许相对虚拟路径“ SignatureImages”

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

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