Использование Сервера.MapPath () внутри статического поля в ASP.NET MVC

Я строю ASP.NET сайт MVC, где я использую Lucene.Net для поисковых запросов. Я!--7-->задал вопрос здесь о том, как правильно структурировать Lucene.Net использование в ASP.NET приложение MVC и было сказано, что лучший метод-объявить my IndexWriter as 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 - это статический, IndexLocation также должны быть статическими. Таким образом, компилятор давая мне следующую ошибку для Server.MapPath():

ссылка на объект требуется для нестатического поля, метода или системы свойств.Сеть.В MVC.Контроллер.Сервер.get'

здесь способ использования сервера.MapPath () или что-то подобное из статического поля? Как исправить эту ошибку?

2 ответов


попробовать HostingEnvironment.MapPath, которая составляет static.

см. этот вопрос SO для подтверждения того, что HostingEnvironment.MapPath возвращает то же значение, что и Server.MapPath: в чем разница между сервером.MapPath и HostingEnvironment.MapPath?


Я думаю, вы можете попробовать это для вызова из класса

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

*----------------извините за оплошность, ибо статическая функция уже ответила на вопрос по течению*

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

обновление

Я получил исключение при использовании System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Ex детали: система.ArgumentException: относительный виртуальный путь "SignatureImages" здесь не разрешен. на Система.Сеть.VirtualPath.FailIfRelativePath ()

решение (протестировано в статическом webmethod)

System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/"); работала