Как разместить приложение Angular с помощью Kestrel

Я пытаюсь развернуть Angular 7 приложение с .NET Core с помощью Kestrel с использованием FileProvider расширение.

Я создал угловое приложение, у меня есть ng build это и я скопировал файлы внутри dist.NET Porject.

Запускать

 public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
        string jsFolderName = "myroot";
        string prodRoot =Path.Combine(AppDomain.CurrentDomain.BaseDirectory,jsFolderName);
        string debugRoot =Path.Combine(Directory.GetCurrentDirectory(),jsFolderName);

        var isDev=env.IsDevelopment();


        DefaultFilesOptions options = new DefaultFilesOptions();
        options.DefaultFileNames.Clear();
        options.DefaultFileNames.Add("/myroot/index.html");
        app.UseDefaultFiles(options);
        app.UseStaticFiles();
        app.UseStaticFiles(new StaticFileOptions() {
            FileProvider = new PhysicalFileProvider(isDev?debugRoot:prodRoot),
            RequestPath = "/app"
        });
        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        } else {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }

PS мой myroot папка находится прямо в корне проекта. Я не знаю, как кормить первую страницу (точку входа) из angular приложение, которое index.html,

1 ответ

Решение

Как предполагает @ Simonare в комментарии, лучший способ - использовать официальный шаблон Angular.

Но если вы хотите обслуживать только статические файлы, вы можете сделать следующее:

  1. Настройте DefaultFilesOptions с FileProvider а также RequestPath,
 
    var fileProvider = new PhysicalFileProvider(isDev?debugRoot:prodRoot);

    DefaultFilesOptions options = new DefaultFilesOptions(){
        RequestPath = "/app",           // для обработки запроса к `/app`
        FileProvider = fileProvider,    // для проверки файлов в `myroot / ** / **`
        DefaultFileNames = new List {"index.html"},
    };
    options.DefaultFileNames.Clear ();
    options.DefaultFileNames.Add ("/ myroot / index.html");
    app.UseDefaultFiles (варианты);

    // обслуживаем статические файлы 
    app.UseStaticFiles();
    app.UseStaticFiles(new StaticFileOptions() {
        RequestPath = "/app",
        FileProvider = fileProvider,
    });
  1. Потому что путь приложения https://yourhost:port/app Вам также необходимо изменить базовый путь в index.html, так что браузер загрузит все ресурсы (например, файлы js, css, img) относительно текущего пути. Оригинальная база /src/index.html является /:

    <!doctype html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>App</title>
            <base href="/">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="icon" type="image/x-icon" href="favicon.ico">
        </head>
        <body>
            <app-root>Loading...</app-root>
        </body>
    </html>

Обратите внимание, нам нужно:

  • изменить <base href="/"> в <base href="/app">
  • или измените базу на пустую строку: <base href="">
  • или удалите эту строку
Другие вопросы по тегам