.NET Core3.1迁移.NET7:UseEndpoints及RazorPages使用疑问
.NET 7中Razor Pages的正确配置(从.NET Core 3.1迁移)
问题背景
将.NET Core 3.1项目迁移到.NET 7时,原Program.cs中使用UseEndpoints嵌套注册路由的代码:
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
会收到提示:
Suggest using top level route registrations UseEndpoints
而Visual Studio提供的自动修复仅添加了_ =来抑制返回值未使用警告,并未采用.NET 7推荐的写法。
.NET 7中Razor Pages的正确操作方式
1. 确保服务注册
首先在Program.cs开头,确保已添加Razor Pages服务:
builder.Services.AddRazorPages();
2. 使用顶级路由注册(推荐写法)
.NET 6及以后引入了简化的路由注册模型,无需将路由配置嵌套在UseEndpoints委托中,直接在WebApplication实例(即app对象)上调用路由扩展方法即可:
var app = builder.Build(); // 先配置必要的中间件(如静态文件、路由中间件) app.UseStaticFiles(); app.UseRouting(); // 直接注册Razor Pages路由 app.MapRazorPages(); // 同时注册控制器默认路由(如果项目还包含MVC控制器) app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
3. 原提示的含义
原提示建议的「顶级路由注册」,就是指这种直接调用app.MapRazorPages()的写法,替代原来嵌套在UseEndpoints里的方式。这种写法更简洁,也是.NET 6+官方推荐的路由配置方式。
4. 关于VS自动修复的说明
VS给出的修复代码只是处理了MapRazorPages()返回值未使用的警告(通过_ =丢弃返回值),但没有改变嵌套在UseEndpoints里的结构,所以并不是最优的迁移写法。
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

