You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:28:15