ASP.NET Core 6 MVC如何配置默认路由?(替代Core2的UseMvcWithDefaultRoute)
在ASP.NET Core 6中替代ASP.NET Core 2的
UseMvcWithDefaultRoute()配置 你之前的错误在于把中间件配置放到了MapGet的端点处理里,这完全不对——MapGet是用来定义最小API的单个端点,而UseMvcWithDefaultRoute是配置MVC路由的中间件,两者不能这么混用。
ASP.NET Core 6采用了顶级语句的简化写法,把原来Startup.cs里的ConfigureServices和Configure逻辑合并到了Program.cs中,具体替换步骤如下:
- 先注册MVC服务
在Program.cs里,WebApplication.CreateBuilder之后,添加MVC控制器和视图的服务注册:
builder.Services.AddControllersWithViews();
- 替换默认端点,配置MVC路由
把原来的app.MapGet("/", () => "Hello World!")(或者你写的错误代码)删掉,换成MVC的默认路由配置,效果和原来的UseMvcWithDefaultRoute()完全一致:
app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
如果你习惯用UseMvcWithDefaultRoute(),也可以直接写:
app.UseMvcWithDefaultRoute();
但官方现在更推荐用MapControllerRoute的写法。
完整的Program.cs示例
var builder = WebApplication.CreateBuilder(args); // 注册MVC控制器和视图服务 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 环境相关配置(可选,和原Startup逻辑一致) if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // 启用静态文件支持,比如CSS、JS app.UseRouting(); app.UseAuthorization(); // 配置MVC默认路由 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
注意事项
- 如果你的项目是用最小API模板创建的,可能需要手动安装
Microsoft.AspNetCore.Mvc.ViewFeaturesNuGet包,才能使用控制器和视图功能。 - 确保你已经创建了对应的控制器(比如HomeController)和视图文件,否则访问时会出现404错误。
内容的提问来源于stack exchange,提问作者Marwan
相关产品推荐
相关产品推荐

