Отобразите физический путь к файлу в asp.net mvc

Я пытаюсь считать файл 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?

41
задан Rudi Visser 29 January 2013 в 10:41
поделиться

2 ответа

string filePath = Server.MapPath(Url.Content("~/Content/Xsl/"));

Я не согласен с идеей, что HttpContext.Current является «злом». Это не молоток для каждой проблемы, но он определенно лучше, чем, например, Session для тех вещей, с которыми он может справиться нормально.

75
ответ дан 27 November 2019 в 00:23
поделиться

Я бы хотел, чтобы корневой путь сайта был введен в конструктор контроллера структурой 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 .

10
ответ дан 27 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: