Как правильно найти абсолютный путь к папке App_Data из контроллера в проекте ASP.NET MVC? Я хотел бы иметь возможность временно работать с XML-файлом, и я не хочу жестко задавать путь.
Это не работает:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Я думаю, что вне веб-контекста VirtualPathUtility.ToAbsolute () не работает. путь строки возвращается как «C: \ App_Data \ somedata.xml»
Где я должен определить путь к файлу .xml в приложении MVC? global.asax и воткнуть его в переменную уровня приложения?
.net
asp.net-mvc
absolute-path
BuddyJoe
источник
источник
Ответы:
ASP.NET MVC1 -> MVC3
ASP.NET MVC4
Ссылка MSDN:
Метод HttpServerUtility.MapPath
источник
Current
либо,Server.MapPath(...)
как упоминал SeriousM.System.Web.Hosting.HostingEnvironment.MapPath()
Вероятно, это более «правильный» способ получить его.
источник
Я пытаюсь привыкнуть использовать
HostingEnvironment
вместо того,Server
чтобы работать в контексте служб WCF.источник
System.Web.Hosting
пространстве имен на тот случай, если кому-то нужно знать соответствующееusing
. Ссылка: docs.microsoft.com/en-us/dotnet/api/…Самый правильный способ - использовать
HttpContext.Current.Server.MapPath("~/App_Data");
. Это означает, что вы можете извлечь путь только из метода, в которомHttpContext
он доступен. Это имеет смысл: каталог App_Data представляет собой структуру папок веб-проекта [1].Если вам нужен путь к ~ / App_Data из класса, к которому у вас нет доступа,
HttpContext
вы всегда можете добавить интерфейс провайдера, используя свой контейнер IoC:Реализуйте это используя ваш
HttpApplication
:Где
MyHttpApplication.GetAppDataPath
выглядит так:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
источник
HttpContext.Current
никогда не быть доступны в одном месте , если вы используете его - через контейнер IoC - в другом месте? Где бы статическое свойство не было доступно?У Фила Хаака есть пример, который, на мой взгляд, немного более стабилен при работе с путями с безумными разделителями каталогов в стиле "\". Это также безопасно обрабатывает конкатенацию пути. Это бесплатно в System.IO
Однако вы также можете попробовать «AppDomain.CurrentDomain.BaseDirector» вместо «Server.MapPath».
источник
ИЛИ
источник
это лучшее решение, чтобы получить путь, который точно нужен сейчас
источник