方法 'UseRouting' 没有重载需要 1 个参数
No overload for method 'UseRouting' takes 1 arguments
我刚刚更新到 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();
});
我确实阅读了一些有关 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
经过一番挖掘,我找到了解决这个问题的办法。由于 dotnet core 3.0 需要一些额外的操作,我将解释我为完成这项工作所做的工作。首先,在 ConfigureServices() 方法中(在 Startup.cs 中),删除:
services.AddMvc().AddNewtonsoftJson();
在此方法的顶部(services.Configure<> 下),添加以下行:
services.AddControllersWithViews()
.AddNewtonsoftJson();
services.AddRazorPages();
接下来,在 Configure() 方法中,在 app.UseAuthentication()
和 app.UseAuthorization();
之前添加 app.UseRouting()
并在此方法的底部替换
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
的用法有些混乱之间,它会告诉您在 Configure
中添加 UseRouting()
方法。所以基本上,你忘了调用端点路由的第一步。
因此您的 Configure
应该(例如)如下所示:
app.UseRouting();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
路由迁移到 3.0 也记录在 migration guide for 3.0。
我刚刚更新到 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();
});
我确实阅读了一些有关 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
经过一番挖掘,我找到了解决这个问题的办法。由于 dotnet core 3.0 需要一些额外的操作,我将解释我为完成这项工作所做的工作。首先,在 ConfigureServices() 方法中(在 Startup.cs 中),删除:
services.AddMvc().AddNewtonsoftJson();
在此方法的顶部(services.Configure<> 下),添加以下行:
services.AddControllersWithViews()
.AddNewtonsoftJson();
services.AddRazorPages();
接下来,在 Configure() 方法中,在 app.UseAuthentication()
和 app.UseAuthorization();
之前添加 app.UseRouting()
并在此方法的底部替换
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 byEndpointMiddleware
and so must be added to the request execution pipeline beforeEndpointMiddleware
. Please addEndpointRoutingMiddleware
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
的用法有些混乱之间,它会告诉您在 Configure
中添加 UseRouting()
方法。所以基本上,你忘了调用端点路由的第一步。
因此您的 Configure
应该(例如)如下所示:
app.UseRouting();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
路由迁移到 3.0 也记录在 migration guide for 3.0。