Получение сгенерированного представления с помощью MVC на Docker - PullRequest
0 голосов
/ 28 мая 2019

У меня есть приложение с ядром dotnet с авторизацией. Поскольку политика компании не позволяет хранить токены Bearer на внешнем интерфейсе, я хочу запустить его через контроллер MVC. Тем не менее, я запускаю SPA с Vue.js, который генерируется. Поэтому я должен вернуть сгенерированный index.cshtml из контроллера. Это работает локально в Kestrel, но как только я разверну его в Docker-контейнере, он больше не будет работать - я полагаю, это как-то связано с тем, как MVC ожидает, что файлы будут где-то, и это не соответствует тому, как Docker обрабатывает это.

Я пробовал разные способы найти файл в модуле. Приложение работает стандартно в / app; и SPA был первоначально развернут в / app / wwwroot. Я не мог найти способ заставить контроллер MVC читать из этой папки. Я изменил веб-пакет vue.js, чтобы создать Index.cshtml и все необходимые ресурсы в / app / View / [ControllerName], но это тоже не сработало.

Dockerfile:

FROM microsoft/dotnet:2.2-aspnetcore-runtime

EXPOSE 80

# Create app directory
WORKDIR /app

# Copy files from the artifact staging folder on agent
COPY <ProjectName>/out .

RUN apt-get update -y && apt-get install ca-certificates -y && rm -rf /var/lib/apt/lists/*
ADD certificate.crt
ADD certificate2.crt
ADD certificate3.crt
RUN update-ca-certificates

ENTRYPOINT ["dotnet", "<ProjectName>.dll"]

Ожидаемый результат: загрузка SPA. Фактические результаты: часто ошибки MVC, что он не может найти файл index.cshtml в разных местах. И он всегда смотрит в неправильные места, хотя я пытаюсь указать это в правильном направлении. Это было с попыткой указать на vue.js в / app / wwwroot; с созданием SPA в / Views / [ControllerName] кажется, что сервер сборки не собирает его правильно, чтобы поместить его туда, и происходят другие странные вещи. Одно время, по-видимому, он генерировал HomeController; которого у проекта нет.

1 Ответ

0 голосов
/ 28 мая 2019

Я суетился и в итоге просто взял сгенерированный файл и вернул его в ответ.

public ActionResult Index()
{
    try
    {
        var fileStream = new FileStream("/app/wwwroot/index.html", FileMode.Open);
        return File(fileStream, "text/html; charset=utf-8");
    }
    catch (Exception ex)
    {
        _logger.LogError($"Kon /app/wwwroot/index.html niet openen", ex);
    }  

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