方法'UseRouting'的重载没有1个参数

Mit*_*tch 6 .net c# asp.net asp.net-mvc asp.net-core

我刚刚更新到ASP.NET Core 3 Preview 5,现在,当我打开解决方案并尝试构建它时,在Configure()的Startup.cs文件中,在以下位置抛出错误“方法'UseRouting'的重载为1个参数”以下代码:

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

我确实阅读了有关Microsoft文档的一些文档,并尝试将上述代码替换为:

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

但是,在生成期间抛出System.InvalidOperationException并带有以下上下文:

'EndpointRoutingMiddleware与EndpointMiddleware设置的端点匹配,因此必须在EndpointMiddleware之前添加到请求执行管道中。请通过在应用程序启动代码中对“ Configure(...)”的调用内调用“ IApplicationBuilder.UseRouting”来添加EndpointRoutingMiddleware。

我尝试在ConfigureServices方法中替换以下行:

    services.AddMvc()
        .AddNewtonsoftJson();
Run Code Online (Sandbox Code Playgroud)

宽度:

    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();
Run Code Online (Sandbox Code Playgroud)

这不再引发错误,但加载完成后我的页面为空白。谁可以帮助我解决这个问题?

对于我的解决方案,我使用以下软件包:

 <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" />
Run Code Online (Sandbox Code Playgroud)

我的解决方案的TargetFramework是netcoreapp3.0

pok*_*oke 12

要再次引用错误消息:

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();
});
Run Code Online (Sandbox Code Playgroud)

到3.0的迁移指南中也记录了向3.0的路由迁移。

  • 解释得很好。 (2认同)

Mit*_*tch 5

经过一番挖掘,我找到了解决这个问题的方法。由于 dotnet core 3.0 需要一些额外的操作,因此我将解释我做了什么来使其工作。首先,在ConfigureServices()方法(在Startup.cs中)中,删除:

services.AddMvc().AddNewtonsoftJson();
Run Code Online (Sandbox Code Playgroud)

在此方法的顶部(在 services.Configure<> 下),添加以下行:

    services.AddControllersWithViews()
        .AddNewtonsoftJson();
    services.AddRazorPages();
Run Code Online (Sandbox Code Playgroud)

接下来,在Configure()方法中,在该方法app.UseRouting()之前app.UseAuthentication()app.UseAuthorization();底部添加替换

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

和:

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