Учитывая, что перенаправление, которое вы здесь применяете, не имеет прямого отношения к ASP.NET Core MVC, один из вариантов - Использовать промежуточное ПО маршрутизации вместо добавления маршрута в самом MVC.Вот пример:
app.UseRouter(builder =>
{
builder.MapGet("", context =>
{
context.Response.Redirect("./swagger/index.html", permanent: false);
return Task.FromResult(0);
});
});
Параметр, передаваемый в делегат UseRouter
(builder
), является экземпляром RouteBuilder
, того же типа, который передается вUseMvc
делегат.В приведенном выше примере мы просто применяем требуемый маршрут напрямую.
Этот вызов может быть добавлен либо до или после вашего существующего вызова на UseMvc
, но добавление его до может быть более логичным(и возможно немного более производительно), поскольку решение о перенаправлении может быть принято без участия MVC.
Стоит отметить, что в этом подходе вообще не используется маршрутизация в конечной точке.В ASP.NET Core 2.2 маршрутизация конечных точек применяется только к ASP.NET Core MVC :
С выходом маршрутизации конечных точек в ASP.NET Core 2.2 связывание конечных точек ограниченона MVC / Razor Pages действия и страницы.Расширение возможностей связывания конечных точек запланировано на будущие выпуски.
Возможно, в ближайшем будущем этот подход промежуточного программного обеспечения маршрутизации также изменится, но на данный момент предоставленный мною подход работает хорошо и полностью
В качестве альтернативы использованию промежуточного программного обеспечения для маршрутизации также можно использовать простую пользовательскую функцию промежуточного программного обеспечения для перенаправления.Вот пример этого для полноты:
app.Use(async (context, next) =>
{
if (context.Request.Path == "/")
{
context.Response.Redirect("./swagger/index.html", permanent: false);
return;
}
await next();
});
Есть еще больше вариантов для достижения этой цели, но я не буду перечислять их все здесь.