Я пытаюсь считать файл XSLT из диска в моем контроллере MVC ASP.NET. То, что я делаю, следующее:
string filepath = HttpContext.Request.PhysicalApplicationPath;
filepath += "/Content/Xsl/pubmed.xslt";
string xsl = System.IO.File.ReadAllText(filepath);
Однако половина пути вниз этот поток на forums.asp.net там является следующей кавычкой
HttpContext. Текущий является злым и если Вы используете его где-нибудь в Вашем mvc приложении, Вы делаете что-то не так, потому что Вам не нужен он.
Пока я не использую Current
, Я задаюсь вопросом, что лучший способ состоит в том, чтобы определить абсолютный физический путь файла в MVC? По некоторым причинам (я не знаю почему!) HttpContext
не чувствует себя хорошо для меня.
Существует ли лучшее (или рекомендовано/лучшее практика) способ считать файлы из диска в ASP.NET MVC?
string filePath = Server.MapPath(Url.Content("~/Content/Xsl/"));
Я не согласен с идеей, что HttpContext.Current
является «злом». Это не молоток для каждой проблемы, но он определенно лучше, чем, например, Session для тех вещей, с которыми он может справиться нормально.
Я бы хотел, чтобы корневой путь сайта был введен в конструктор контроллера структурой DI:
public class HomeController: Controller
{
private readonly string _siteRoot;
public HomeController(string siteRoot)
{
_siteRoot = siteRoot;
}
public ActionResult Index()
{
string filePath = Path.Combine(_siteRoot, @"Content\Xsl\pubmed.xslt");
return File(filePath, "text/xml");
}
}
Что касается корневого пути сайта, это может быть выражается статическим свойством HostingEnvironment.ApplicationPhysicalPath .