asp. net core 3.1 с шаблоном angular больше не может отвечать 404 и всегда перенаправляет на индекс spa. html page - PullRequest
0 голосов
/ 15 января 2020

У меня есть asp. net core 3.1 проект с бритвенными страницами. Я добавил spa с angular с <base href="/app" />, чтобы приложение было сервером под /app. Теперь любой несуществующий маршрут возвращает страницу spa index. html page вместо 404.

У меня нет клиентской маршрутизации в моем приложении angular.

Мое желаемое поведение - отвечать 404, если нет маршрута, соответствующего ни страницам бритвы, ни API, ни /app.

Однако, когда я набираю localhost:5000/non-existent-route, приложение перенаправляет на мое приложение angular index. html, что не соответствует желаемому поведению.

По сути, я хочу, чтобы приложение angular index.html не использовалось в качестве резервного по умолчанию, если не найдено ни одного маршрута.

Вот мой файл Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddControllers().AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; });
        services.AddSwaggerDocument();
        services.AddHealthChecks();
        // In production, the Angular files will be served from this directory
        services.AddSpaStaticFiles(configuration => { configuration.RootPath = "ClientApp/dist"; });
        // ...
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        // app.UseHttpsRedirection();
        app.UseStaticFiles();
        if (!env.IsDevelopment())
        {
            app.UseSpaStaticFiles();
        }

        app.UseOpenApi();
        app.UseSwaggerUi3();

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "api/{controller}/{action=Index}/{id?}");
            endpoints.MapHealthChecks("/health");
        });

        app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "ClientApp";
            if (env.IsDevelopment())
            {
                spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
            }
        });
    }
}

1 Ответ

0 голосов
/ 15 января 2020

Не уверен, что вы можете сделать это на стороне сервера, но это возможно на стороне Angular, как показано ниже:

@NgModule({
  imports: [
    NgbModule.forRoot(),
    RouterModule.forRoot([
      {
        path: '', component: MainParentComponent, children: [
            { path: '**', component: ErrorComponent } //Default redirection for invalid URLs or unauthorised URLs
        ]
      }
    ])
  ]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...