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

如何在Controller中获取Action特性的路由值?

在Controller中获取Action的路由路径值

我定义了如下Action方法:

[Route("example-page")]
public ActionResult MyAction()
{
    // 我想在此处使用"example-page",就像查询参数一样。

    return View();
}

我尝试用以下代码获取路由值:

var routeName = Url.RequestContext.RouteData.Values["action"].ToString();

但它返回的是MyAction,我找不到其他方法获取example-page这个路由路径。


解决方法

方法一:反射读取RouteAttribute的模板

直接通过反射拿到当前Action上的RouteAttribute,就能提取路由模板:

var routeAttr = typeof(你的控制器类名)
    .GetMethod(nameof(MyAction))
    .GetCustomAttributes(typeof(RouteAttribute), false)
    .FirstOrDefault() as RouteAttribute;

if (routeAttr != null)
{
    string targetRoute = routeAttr.Template; // 这里得到"example-page"
}

记得把代码里的你的控制器类名替换成实际的控制器名称。

方法二:通过HttpContext.Endpoint获取(ASP.NET Core适用)

如果是ASP.NET Core项目,借助HttpContext的Endpoint元数据可以拿到路由信息:

var endpoint = HttpContext.GetEndpoint();
if (endpoint != null)
{
    var routeMeta = endpoint.Metadata.GetMetadata<RoutePatternMetadata>();
    if (routeMeta != null)
    {
        string targetRoute = routeMeta.RoutePattern.RawText;
    }
}

方法三:尝试从RouteData的Route属性读取

部分场景下,也可以直接从RouteData关联的路由对象里拿模板:

var targetRoute = Url.RequestContext.RouteData.Route?.RouteTemplate;

不过这种方式在直接使用[Route]特性标注Action时,不一定能返回预期值,需要根据实际路由配置测试。


内容的提问来源于stack exchange,提问作者Hüseyin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:50:58