При переходе с .NET Core 3.1 на .NET 5 мы столкнулись со странным поведением при настройке универсального маршрута.
Соответствующая часть начальной конфигурации выглядит следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "home",
defaults: new { controller = "Home", action = "Index" });
//catch-all endpoint
endpoints.Map("{*.}", async (t) =>
{
System.Console.WriteLine("hello");
await Task.CompletedTask;
});
});
}
При вызове URL-адреса: https://localhost:port/home используется универсальный маршрут вместо домашнего контроллера. . Если универсальная карта конечной точки закомментирована, то попадет в конечную точку домашнего контроллера — чего и следовало ожидать в обоих случаях, читая документы MSDN. Поведением до миграции был самый конкретный маршрут, вызываемый первым (т. е. конечная точка домашнего контроллера), и универсальный ответ реагировал только тогда, когда ни один маршрут не мог быть сопоставлен.
Были ли критические изменения в .NET 5 или мы что-то упустили?