Использование Server.mappath () внутри статического поля в ASP.NET MVC
-
05-10-2019 - |
Вопрос
Я создаю сайт ASP.NET MVC, где я использую lucene.net для поисковых запросов. я задал вопрос здесь о том, как правильно структурировать использование Lucene.net в приложении ASP.NET MVC и было сказано, что лучший метод - объявить мой 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 () или что-то подобное из статического поля? Как я могу исправить эту ошибку?
Решение
Пытаться HostingEnvironment.MapPath
, который static
.
Увидеть это так вопрос для подтверждения того, что HostingEnvironment.MapPath
возвращает одинаковое значение, что и Server.MapPath
: В чем разница между server.mappath и hostingenvironment.mappath?
Другие советы
Я думаю, что вы можете попробовать это зазвонить из класса
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
*------------------ Извините, я надзор, для статической функции уже ответил на вопрос по Adrift *
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Обновлять
У меня есть исключение во время использования System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
EX Подробности: System.argumentException: Относительный виртуальный путь «подписи» здесь не допускается. на System.Web.virtualPath.failifrelativePath ()
Решение (проверено в статическом webmethod)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Работал