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)的一部分。
这两个步骤由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的路由迁移。
经过一番挖掘,我找到了解决这个问题的方法。由于 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)
| 归档时间: |
|
| 查看次数: |
2817 次 |
| 最近记录: |