Использование Server.MapPath() внутри статического поля в ASP.NET MVC
Я создаю сайт 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() или что-то подобное из статического поля? Как я могу исправить эту ошибку?
Спасибо заранее.
Ответы
Ответ 1
Попробуйте HostingEnvironment.MapPath
, который static
.
См. этот вопрос SO для подтверждения того, что HostingEnvironment.MapPath
возвращает то же значение, что и Server.MapPath
: В чем разница между Server.MapPath и HostingEnvironment.MapPath?
Ответ 2
Я думаю, вы можете попробовать это для вызова из класса
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
* ---------------- Извините, я пробовал, поскольку статическая функция уже ответила на вопрос дрейфом *
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Обновление
У меня есть исключение при использовании System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Подробности: System.ArgumentException: относительный виртуальный путь 'SignatureImages' здесь запрещен. в System.Web.VirtualPath.FailIfRelativePath()
Решение (проверено на статическом веб-методе)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Работал