Я создаю сайт ASP.NET MVC, где использую Lucene.Net для поисковых запросов. Я задал здесь вопрос о том, как правильно структурировать использование 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);
Как writer
статический, он IndexLocation
также должен быть статическим. Таким образом, компилятор выдает следующую ошибку Server.MapPath()
:
Ссылка на объект требуется для нестатического поля, метода или свойства System.Web.Mvc.Controller.Server.get.
Есть ли способ использовать Server.MapPath () или что-то подобное из статического поля ? Как исправить эту ошибку?
источник
Я думаю, вы можете попробовать это, чтобы позвонить из класса
* ---------------- Извините, я недосмотрел, для статической функции уже ответил на вопрос по течению *
Обновить
У меня исключение при использовании
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Сведения об Ex: System.ArgumentException: относительный виртуальный путь SignatureImages здесь не допускается. в System.Web.VirtualPath.FailIfRelativePath ()
Решение (проверено статическим веб-методом)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Работалисточник
Server.MapPath()
разрешает путь «files / file1.doc». Он использует текущий контекст, например, для определения пути к текущей странице, а затем создает оттуда относительный путь. Если мы находимся~/Subfolder/Page1.aspx
, URL-адрес будет отображаться из~/Subfolder/files/file1.doc
. ОбъектHostingEnviornment.MapPath()
статичен и, следовательно, всегда требует полного виртуального пути, начиная с~/
части URL-адреса.