Нет перегрузки для метода UseRouting, который принимает 1 аргумент

Я только что обновился до ASP.NET Core 3 Preview 5, теперь, когда я открываю свое решение и пытаюсь собрать его, возникает ошибка «Нет перегрузки для метода UseRouting, который принимает 1 аргумент» в файле Startup.cs в Configure() в следующем коде:

    app.UseRouting(routes => {
        routes.MapControllerRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
        routes.MapRazorPages();
    });

Я прочитал некоторую документацию по документам Microsoft и попытался заменить приведенный выше код на:

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

Однако во время сборки возникает исключение System.InvalidOperationException со следующим контекстом:

'EndpointRoutingMiddleware matches endpoints setup by EndpointMiddleware and so must be added to the request execution pipeline before EndpointMiddleware. Please add EndpointRoutingMiddleware by calling 'IApplicationBuilder.UseRouting' inside the call to 'Configure(...)' in the application startup code.'

Я попытался заменить следующую строку в методе ConfigureServices:

    services.AddMvc()
        .AddNewtonsoftJson();

ширина:

    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();

Это больше не вызывает ошибок, но моя страница пуста, когда она заканчивает загрузку. Кто может помочь мне решить эту проблему?

Для моего решения я использую следующие пакеты:

 <PackageReference Include = "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version = "3.0.0-preview5-19227-01" />
    <PackageReference Include = "Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version = "3.0.0-preview5-19227-01" />
    <PackageReference Include = "Microsoft.AspNetCore.Identity.UI" Version = "3.0.0-preview5-19227-01" />
    <PackageReference Include = "Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version = "3.0.0-preview5-19227-01" />
    <PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "3.0.0-preview5.19227.1" />
    <PackageReference Include = "Microsoft.EntityFrameworkCore.Tools" Version = "3.0.0-preview5.19227.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include = "Microsoft.Extensions.Logging.Debug" Version = "3.0.0-preview5.19227.9" />
    <PackageReference Include = "Microsoft.VisualStudio.Web.CodeGeneration.Design" Version = "2.2.3" />

TargetFramework моего решения — netcoreapp3.0.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
20
0
19 270
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Немного покопавшись, я нашел решение этой проблемы. Поскольку dotnet core 3.0 требует некоторых дополнительных действий, я объясню, что я сделал, чтобы это заработало. Во-первых, в методе ConfigureServices() (в Startup.cs) удалите:

services.AddMvc().AddNewtonsoftJson();

В верхней части этого метода (в разделе services.Configure<>) добавьте следующие строки:

    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();

Затем в методе Configure() добавьте app.UseRouting() перед app.UseAuthentication() и app.UseAuthorization(); и в нижней части этого метода замените

    app.UseRouting(routes => {
        routes.MapControllerRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
        routes.MapRazorPages();
    });

с участием:

    app.UseEndpoints(endpoints => {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapRazorPages();
    });
Ответ принят как подходящий

Чтобы снова процитировать сообщение об ошибке:

EndpointRoutingMiddleware matches endpoints setup by EndpointMiddleware and so must be added to the request execution pipeline before EndpointMiddleware. Please add EndpointRoutingMiddleware by calling 'IApplicationBuilder.UseRouting' inside the call to 'Configure(...)' in the application startup code.

ASP.NET Core 3 использует усовершенствованный маршрутизация конечной точки, который обычно дает больше контроля над маршрутизацией внутри приложения. Маршрутизация конечных точек работает в два отдельных этапа:

  • На первом этапе запрошенный маршрут сопоставляется с настроенными маршрутами, чтобы выяснить, к какому маршруту осуществляется доступ.
  • На последнем этапе оценивается определенный маршрут и соответствующее промежуточное ПО, т.е. MVC, называется.

Это два отдельных шага, позволяющие другим промежуточным программам действовать между этими точками. Это позволяет этим промежуточным программам использовать информацию из маршрутизации конечных точек, например. для обработки авторизации без необходимости выполнения как части фактического обработчик (например, MVC).

Два шага устанавливаются app.UseRouting() и app.UseEndpoints(). Первый зарегистрирует промежуточное ПО, которое запускает логику для определения маршрута. Последний затем выполнит этот маршрут.

Если вы внимательно прочитаете сообщение об ошибке, между несколько запутанным использованием EndpointRoutingMiddleware и EndpointMiddleware вам будет предложено добавить UseRouting() внутрь метода Configure. Таким образом, вы забыли вызвать первый шаг маршрутизации конечной точки.

Итак, ваш Configure должен (например) выглядеть так:

app.UseRouting();

app.UseAuthentication();

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

Миграция маршрутизации на версию 3.0 также описана в руководство по миграции на 3.0.

Другие вопросы по теме