Как разрешить путь относительно корня приложения ASP.NET MVC 4?
Как мне разрешить пути относительно корневого каталога приложения ASP.NET MVC 4? То есть, я хочу открыть файлы, принадлежащие приложению, из действий контроллера, на которые ссылаются, как ~/Data/data.html
. Эти пути обычно указаны в Web.config
.
EDIT:
"Разрешить" Я хочу преобразовать путь относительно корневого каталога приложения в абсолютный путь, например. ~/Data/data.html
→ C:\App\Data\Data.html
.
Ответы
Ответ 1
Чтобы получить абсолютный путь, используйте это:
String path = HttpContext.Current.Server.MapPath("~/Data/data.html");
ИЗМЕНИТЬ:
Чтобы получить Контекст Controller, удалите .Current
из приведенной выше строки. Используя HttpContext
сам по себе, легче тестировать, потому что на основе контекста контроллера более локализован.
Теперь я понимаю, что мне не нравится, как работает Server.MapPath
(внутренне в итоге вызывает HostingEnvironment.MapPath
). Поэтому я рекомендую всегда использовать HostingEnvironment.MapPath
, потому что он статичен и не зависит от контекста, если, конечно, вы этого не хотите...
Ответ 2
Я нахожу этот код полезным, когда мне нужен путь вне контроллера, например, когда я инициализирую компоненты в Global.asax.cs:
HostingEnvironment.MapPath("~/Data/data.html")
Ответ 3
Просто используйте следующие
Server.MapPath("~/Data/data.html")
Ответ 4
В действии вы можете позвонить:
this.Request.PhysicalPath
который возвращает физический путь в отношении текущего контроллера. Если вам нужен только корневой путь:
this.Request.PhysicalApplicationPath