Використання Server.MapPath () всередині статичного поля в ASP.NET MVC


116

Я будую сайт 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 () або щось подібне зі статичного поля ? Як я можу виправити цю помилку?

Відповіді:


240

Спробуйте HostingEnvironment.MapPath, що єstatic .

Дивіться це питання ТА для підтвердження, яке HostingEnvironment.MapPathповертає те саме значення, що і таке Server.MapPath: Яка різниця між Server.MapPath і HostingEnvironment.MapPath?


Ця функція дала мені помилку, оскільки результат, повернутий HostingEnvironment.MapPath, не такий, як Server.MapPath, останній повертає абсолютний URL, а не відносний URL
Джон

@john, я отримую однакове значення для обох.
ps2goat

45

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

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

* ---------------- Вибачте, я переглядаю, за статичну функцію вже відповів на питання adrift *

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/"); Працювали


1
Єдиний раз, коли я побачив помилку, яку ви згадали у своєму оновленні, - це коли код використовував відносний віртуальний шлях. Наприклад, Server.MapPath()дозволяє шлях "файли / file1.doc". Він використовує, наприклад, поточний контекст для визначення шляху поточної сторінки, а потім створює звідти відносний шлях. Якщо ми знаходимося ~/Subfolder/Page1.aspx, URL-адреса відображатиметься із ~/Subfolder/files/file1.doc. HostingEnviornment.MapPath()Статична, і , таким чином , завжди вимагає повного віртуального шляху, починаючи з ~/частини URL.
ps2goat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.