У меня есть 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");
}
});
}
}