Как сделать статический HTML-файл в MVC Core? - PullRequest
0 голосов
/ 14 октября 2019

Я использую статическое программное обеспечение для доступа к файлам, расположенным вне wwwroot. Эти ресурсы включают в себя файлы CSS и изображения и доступны в ~ / resources. Например, клиентская css находится здесь:

 <link rel="stylesheet" href="~/resources/css/customer.css" />

Теперь я хотел бы предоставить статический html-файл, расположенный в ~ / resources / html / static.html. Я создал модель, которая содержит только свойство HtmlString, и я хочу внедрить содержимое static.html в стандартный cshtml, используя эту модель. Вот мое действие контроллера:

public IActionResult MentionsLegales()
{
    var filePath = IO.Path.Combine(
        _env.ContentRootPath, "PersonnalisationClient", _config["PersonnalisationClient:NomClient"], "html", "mentionslegales.html");

    var mentionsLegalesModel = new MentionsLegalesModel();

    if (IO.File.Exists(filePath))
        mentionsLegalesModel.Content = new Microsoft.AspNetCore.Html.HtmlString(IO.File.ReadAllText(filePath));
    else
    {
        _logger.LogWarning($"Le fichier {filePath} est introuvable");
        mentionsLegalesModel.Content = new Microsoft.AspNetCore.Html.HtmlString(string.Empty);
    }
    return View(mentionsLegalesModel);
}

Как видите, здесь я обращаюсь к файлу по его физическому пути. Это работает, но я не удовлетворен этим решением. Я хотел прочитать файл через его путь к серверу, то есть ~ / resources / html / mentionslegales.html, но я не знаю, как это сделать. По-видимому, в не Core MVC можно использовать Server.MapPath для таких целей, но я не смог найти эквивалент в ядре MVC. У вас есть идеи?

1 Ответ

0 голосов
/ 15 октября 2019

Если вы хотите вызывать статические ресурсы в папке за пределами корневого веб-каталога на странице, вы можете настроить промежуточное ПО статических файлов в методе Configure следующим образом:

app.UseStaticFiles(); // For the wwwroot folder

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(
        Path.Combine(Directory.GetCurrentDirectory(), "resources")),
    RequestPath = "/resources"
});

Затем обратитесь к файлу, как показано ниже:

 <link rel="stylesheet" href="~/resources/css/customer.css" />

return View() зарезервировано для возврата результата выполнения представления, то есть страницы Razor CSHTML . Вы не можете использовать HTML-страницу для этого. Попробуйте перенаправить напрямую:

return Redirect("~/resources/html/mentionslegales.html");

См. Ссылки ниже, которые могут помочь вам лучше понять, как вернуть статические html-страницы из контроллера.

Как сделать запрос на получение файла HTML с помощью ASP.NET Core MVC

https://github.com/aspnet/Mvc/issues/3751

Обновление:

Для добавления статического html в View вы можете обратиться к:

Controller

 public IActionResult GetStaticFile()
 {
        var mentionsLegalesModel = new MentionsLegalesModel();
        var htmlString = System.IO.File.ReadAllLines("./resources/html/mentionslegales.html");
        mentionsLegalesModel.Content = string.Join("", htmlString);
        return View(mentionsLegalesModel);
  }

View:

@model MentionsLegalesModel

@Html.Raw(Model.Content)

Также вы можете попробоватьЧастичное представление предлагается по вышеуказанной первой ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...