Использование Server.MapPath () внутри статического поля в ASP.NET MVC - PullRequest
109 голосов
/ 26 сентября 2010

Я создаю сайт ASP.NET MVC, где я использую Lucene.Net для поисковых запросов.Я задал здесь вопрос о том, как правильно структурировать использование Lucene.Net в приложении ASP.NET MVC, и мне сказали, что лучший способ - объявить 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);

Поскольку writer является статическим, IndexLocation также должно быть статическим.Таким образом, компилятор выдает мне следующую ошибку для Server.MapPath():

Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Web.Mvc.Controller.Server.get '

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

Ответы [ 2 ]

228 голосов
/ 26 сентября 2010

Попробуйте HostingEnvironment.MapPath, что составляет static.

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

40 голосов
/ 26 октября 2013

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

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

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

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

Обновление

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

Ex details: System.ArgumentException: относительный виртуальный путь 'SignatureImages' здесь не разрешен. at System.Web.VirtualPath.FailIfRelativePath ()

Решение (проверено в статическом веб-методе)

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

...