如何在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
相关产品推荐
相关产品推荐

