在ASP.NET Core Razor Pages中如何创建命名路由?
在ASP.NET Core Razor Pages中如何创建命名路由?
嗨,太懂这种改完路由要手动翻遍所有页面改链接的崩溃感了!在ASP.NET Core Razor Pages里完全可以实现命名路由,帮你彻底摆脱这种重复劳动,下面给你讲两种常用的实现方式:
方法一:在页面中直接指定命名路由(最直观)
这种方式适合单个页面单独配置,直接在目标页面的@page指令里加上命名参数就行,ASP.NET Core 3.0及以上版本都支持。
比如你原来的some-page页面,在它的.cshtml文件顶部修改@page指令:
@page "/some-page" -name:SomePageRoute @model SomePageModel
这里的-name:SomePageRoute就是给这个页面的路由指定了一个唯一名称SomePageRoute。
之后所有要跳转到这个页面的链接,都可以用这个名称来替代原来的路径:
<a asp-route="SomePageRoute">Go to some-page</a>
以后你要是想改这个页面的路由路径,只需要把@page里的"/some-page"改成新路径(比如"/new-some-page"),所有用asp-route="SomePageRoute"的链接都会自动指向新路径,根本不用一个个去改!
方法二:在全局路由配置中添加命名路由(适合统一管理)
如果你的页面比较多,想集中管理所有命名路由,可以在Program.cs(ASP.NET Core 6+)或者Startup.cs(旧版本)里配置路由时添加:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 这里给指定页面添加命名路由 app.MapRazorPages() .AddPageRoute("/SomePage", "SomePageRoute") // 第一个参数是页面路径,第二个是路由名称 .AddPageRoute("/Products/List", "ProductsListRoute"); // 可以批量添加多个 app.Run();
配置好之后,同样用asp-route指定路由名称来创建链接:
<a asp-route="ProductsListRoute">Go to Products List</a>
额外小贴士
- 命名路由的名称要保证全局唯一,不然会出现路由匹配冲突的问题,建议用有意义的名称,比如
ProductsList、CheckoutPage,方便后期维护。 - 如果页面有handler方法(比如
OnGetDetails),也可以结合命名路由使用,只需要加上asp-route-handler参数就行:<a asp-route="SomePageRoute" asp-route-handler="Details">View Details</a>
备注:内容来源于stack exchange,提问作者TheMakarik
相关产品推荐
相关产品推荐

