ASP.NET Core 3.x Razor Pages如何获取常量路由对应类别值
在ASP.NET Core 3.x Razor Pages中获取预定义常量路由的类别名称
嘿,我懂你的需求啦——你已经给PropertyList页面配置了几个固定的专属路由,现在想在PageModel的OnGet方法里搞清楚当前请求到底对应哪个类别路由,对吧?这里有两种靠谱的实现方式:
方法一:解析请求路径(简单直接)
因为你的路由都是固定的/properties/categoryX格式,所以可以直接从请求路径里提取最后一段作为类别名称:
public async Task OnGet() { var requestPath = HttpContext.Request.Path.Value; // 先判断路径是否符合预定义规则,避免意外情况 if (requestPath.StartsWith("/properties/", StringComparison.OrdinalIgnoreCase)) { // 截取"/properties/"之后的部分就是类别名称 var categoryName = requestPath.Substring("/properties/".Length); // 这里就可以用categoryName做后续业务逻辑了 // 比如:ViewData["CurrentCategory"] = categoryName; } }
这种方法不需要修改已有的路由配置,直接拿路径解析就行,适配你当前的固定路由场景。
方法二:给路由绑定自定义路由值(更可靠)
如果你想更严谨,避免路径解析可能带来的错误,可以在配置路由时直接给每个规则绑定一个categoryName路由值,这样在PageModel里就能直接拿到精准的值:
第一步:更新路由配置
options.Conventions.AddPageRoute("/propertylist", "/properties/category1", routeValues: new { categoryName = "category1" }); options.Conventions.AddPageRoute("/propertylist", "/properties/category2", routeValues: new { categoryName = "category2" }); options.Conventions.AddPageRoute("/propertylist", "/properties/category3", routeValues: new { categoryName = "category3" });
第二步:在PageModel中获取路由值
有两种便捷方式可以拿到这个值:
方式A:从RouteData中读取
public async Task OnGet() { if (RouteData.Values.TryGetValue("categoryName", out var categoryObj)) { var categoryName = categoryObj.ToString(); // 处理你的业务逻辑即可 } }
方式B:直接绑定到OnGet方法参数
ASP.NET Core会自动把路由值绑定到方法参数上,超级省心:
public async Task OnGet(string categoryName) { // 这里的categoryName就是路由配置里对应的category1/category2/category3 // 直接使用就行啦 }
这种方法完全依赖路由系统传递的值,不会因为路径格式的微小变化(比如大小写、额外斜杠)导致解析错误,更推荐使用。
内容的提问来源于stack exchange,提问作者Melih
相关产品推荐
相关产品推荐

