Никакая перегрузка для метода 'UseRouting' не принимает 1 аргумент - PullRequest
1 голос
/ 15 мая 2019

Я только что обновил до 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 соответствует конечным точкам, установленным EndpointMiddleware, и поэтому должен быть добавлен в конвейер выполнения запроса перед EndpointMiddleware.Добавьте EndpointRoutingMiddleware, вызвав «IApplicationBuilder.UseRouting» внутри вызова «Configure (...)» в коде запуска приложения. «

Я попытался заменить следующую строку в методе 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

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

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

EndpointRoutingMiddleware соответствует настройке конечных точек с помощью EndpointMiddleware, поэтому ее необходимо добавить в конвейер выполнения запроса до EndpointMiddleware.Пожалуйста, добавьте EndpointRoutingMiddleware, вызвав 'IApplicationBuilder.UseRouting' внутри вызова к 'Configure(...)' в коде запуска приложения.

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 .

0 голосов
/ 15 мая 2019

После некоторых копаний я нашел решение этой проблемы. Так как 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();
    });
...