Обновление ASP.Net Core 2.2 - проблема перенаправления маршрута по умолчанию - PullRequest
0 голосов
/ 17 января 2019

До Asp.Net Core 2.1 я использовал приведенный ниже код для перенаправления маршрута по умолчанию на конечную точку сваггера.

app.UseMvc(builder =>
{
    builder.MapRoute("default", template: "api/{controller}/{action}/{id?}");
    builder.MapGet("", context =>
    {
        context.Response.Redirect("./swagger/index.html", permanent: false);
        return Task.FromResult(0);
    });

});

Однако при обновлении до Asp.Net Core 2.2 этот код не работал должным образом (перенаправление называется)

Это известная проблема? Как я могу решить это?

Редактировать: Спасибо @ KirkLarkin

Я изменил options.EnableEndpointRouting на false и теперь он работает. Однако, как я понимаю, это устаревший метод маршрутизации.

Что мне нужно сделать, чтобы сделать маршрутизацию с options.EnableEndpointRouting = true;?

1 Ответ

0 голосов
/ 18 января 2019

Учитывая, что перенаправление, которое вы здесь применяете, не имеет прямого отношения к 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();
});

Есть еще больше вариантов для достижения этой цели, но я не буду перечислять их все здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...