如何在ASP.NET Core中自定义Razor页面路由URL
在ASP.NET Core MVC中自定义路由实现特定URL
在ASP.NET Core MVC里,你可以通过两种常用方式实现自定义URL路由,替代原来ASP.NET的routeConfig配置,解决默认URL(如http://localhost:5088/Home/Faq)转成特定URL(如http://localhost:5088/freq_asked)的需求:
方式一:在Program.cs中配置传统路由
ASP.NET Core里的传统路由配置逻辑和旧版类似,但要注意路由顺序——自定义路由必须放在默认路由前面,因为路由匹配是从上到下执行的,先匹配到的路由会优先生效。
在Program.cs中按以下方式配置:
var builder = WebApplication.CreateBuilder(args); // 添加MVC控制器服务 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 先配置必要的中间件(如静态文件、异常处理等,按项目需求添加) if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // 必须先启用路由中间件 app.UseRouting(); // 添加自定义路由 - 匹配/freq_asked到Home/Faq app.MapControllerRoute( name: "FaqRoute", pattern: "freq_asked", defaults: new { controller = "Home", action = "Faq" } ); // 添加自定义路由 - 匹配/contact_the_support_team到Home/Contacts app.MapControllerRoute( name: "ContactsRoute", pattern: "contact_the_support_team", defaults: new { controller = "Home", action = "Contacts" } ); // 最后添加默认路由(兜底用) app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}" ); app.Run();
方式二:使用属性路由(直接在Action上标注)
这种方式更灵活,不需要修改Program.cs的路由配置,直接在控制器的Action方法上添加[Route]特性即可:
public class HomeController : Controller { // 访问/freq_asked时触发此Action [Route("freq_asked")] public IActionResult Faq() { return View(); } // 访问/contact_the_support_team时触发此Action [Route("contact_the_support_team")] public IActionResult Contacts() { return View(); } // 其他默认路由的Action(如Index) public IActionResult Index() { return View(); } }
注意事项
- 若同时使用传统路由和属性路由,属性路由的优先级更高
- 确保控制器和Action的名称拼写正确,ASP.NET Core路由默认不区分大小写,但建议保持一致避免问题
- 中间件顺序不能错:
UseRouting必须在MapControllerRoute之前调用
内容的提问来源于stack exchange,提问作者litlln
相关产品推荐
相关产品推荐

