123

我正在构建一个 ASP.NET MVC 站点,我在其中使用 Lucene.Net 进行搜索查询。我在这里问了一个关于如何在 ASP.NET MVC 应用程序中正确构建 Lucene.Net 使用的问题,并被告知最好的方法是将 my 声明IndexWriterpublic 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() 或类似的东西?我该如何解决这个错误?

4

2 回答 2

247

试试看HostingEnvironment.MapPath,就是static

请参阅此 SO 问题以确认HostingEnvironment.MapPath返回与以下相同的值Server.MapPathServer.MapPath 和 HostingEnvironment.MapPath 有什么区别?

于 2010-09-25T23:58:25.877 回答
53

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

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

* ----------------对不起,我疏忽了,静态函数已经回答了漂流的问题*

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

更新

使用时出现异常 System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Ex 详细信息:System.ArgumentException:此处不允许使用相对虚拟路径“SignatureImages”。在 System.Web.VirtualPath.FailIfRelativePath()

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

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

于 2013-10-26T14:22:38.597 回答