Как разместить приложение Angular с помощью Kestrel - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь развернуть приложение 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 Ответ

0 голосов
/ 19 декабря 2018

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

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

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

    DefaultFilesOptions options = new DefaultFilesOptions(){
        RequestPath = "/app",           // to process request to `/app`
        FileProvider = fileProvider,    // to check files under `myroot/**/**`
        DefaultFileNames = new List { "index.html" },
    };
    <strike>options.DefaultFileNames.Clear();</strike>
    <strike>options.DefaultFileNames.Add("/myroot/index.html");</strike>
    app.UseDefaultFiles(options);

    // serve static files 
    app.UseStaticFiles();
    app.UseStaticFiles(new StaticFileOptions() {
        RequestPath = "/app",
        FileProvider = fileProvider,
    });

Поскольку путь к приложению 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="">
  • или удалите эту строку
...