Asp.net core 2.1 - Как обслуживать несколько угловых приложений? - PullRequest
3 голосов
/ 20 марта 2019

Я пытаюсь обслуживать 2 угловых приложения из моей основной службы .net следующим образом:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddSpaStaticFiles(configuration =>
    {
        configuration.RootPath = "wwwroot/app";
    });

    services.AddSpaStaticFiles(configuration =>
    {
        configuration.RootPath = "wwwroot/admin";
    });

    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...

    app.UseSpaStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=0");
        }
    });

    app.UseMvc();

    app.Map("/app", client =>
    {
        client.UseSpa(spa =>
        {
            spa.Options.SourcePath = "wwwroot/app";
        });
    }).Map("/admin", admin =>
    {
        admin.UseSpa(spa =>
        {
            spa.Options.SourcePath = "wwwroot/admin";
        });
    });
}

в файловой системе, у меня есть только dist выходные данные этих приложений (так как ониразработано другой командой).Вот так это выглядит так:

  • C: [МОЙ ПУТЬ ПРОЕКТА] \ wwwroot \ app
  • C: [ПУТЬ МОЕГО ПРОЕКТА] \ wwwroot \ admin

Но по какой-то причине приложение администратора работает, а приложение не работает, а также не поддерживает страницу по умолчанию, поэтому мне нужно ввести URL-адрес с помощью /index.html.

Любые идеи о том, какрешить это?

1 Ответ

3 голосов
/ 21 марта 2019

Ну, я наконец-то решил это, и это работает так:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddSpaStaticFiles();

    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...

    app.UseSpaStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
    });

    app.UseMvc();

    app.Map("/app", client =>
    {
        client.UseSpa(spa =>
        {
            spa.Options.SourcePath = "wwwroot/app";
            spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/app"))
            };
        });
    }).Map("/admin", admin =>
    {
        admin.UseSpa(spa =>
        {
            spa.Options.SourcePath = "wwwroot/admin";
            spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/admin"))
            };
        });
    });
}

Кроме того, не забудьте зайти в файл index.html каждого приложения и соответственно установить тег base следующим образом:это:

//for the client application:
<base href="/app/">

//for the admin application
<base href="/admin/">
...