如何使用 ASP.NET Core 获取当前路由名称?
Posted
技术标签:
【中文标题】如何使用 ASP.NET Core 获取当前路由名称?【英文标题】:How can I get the current route name with ASP.NET Core? 【发布时间】:2019-11-23 02:59:35 【问题描述】:我有一个基于 ASP.NET Core 2.2 框架编写的应用程序。
我有以下控制器
public class TestController : Controller
[Route("some-parameter-3/name/id:int/page:int?", Name = "SomeRoute3Name")]
[Route("some-parameter-2/name/id:int/page:int?", Name = "SomeRoute2Name")]
[Route("some-parameter-1/name/id:int/page:int?", Name = "SomeRoute1Name")]
public ActionResult Act(ActVM viewModel)
// switch the logic based on the route name
return View(viewModel);
如何在操作和/或视图中获取路线名称?
【问题讨论】:
【参考方案1】:对 Kirk Larkin 答案的小修正。有时您必须使用模板属性而不是名称:
var ari = ControllerContext.ActionDescriptor.AttributeRouteInfo;
var route = ari.Name ?? ari.Template;
【讨论】:
【参考方案2】:对我来说,@krik-larkin 的回答不起作用,因为在我的情况下,AttributeRouteInfo
始终为空。
我使用了以下代码:
var endpoint = HttpContext.GetEndpoint() as RouteEndpoint;
var routeNameMetadata = endpoint?.Metadata.OfType<RouteNameMetadata>().SingleOrDefault();
var routeName = routeNameMetadata?.RouteName;
【讨论】:
在我的情况下完全一样。这应该被标记为答案。谢谢【参考方案3】:在控制器内部,您可以从ControllerContext
的ActionDescriptor
中读取AttributeRouteInfo
。 AttributeRouteInfo
有一个 Name
属性,其中包含您要查找的值:
public ActionResult Act(ActVM viewModel)
switch (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name)
// ...
return View(viewModel);
在 Razor 视图内部,ActionDescriptor
可通过 ViewContext
属性获得:
@
var routeName = ViewContext.ActionDescriptor.AttributeRouteInfo.Name;
【讨论】:
以上是关于如何使用 ASP.NET Core 获取当前路由名称?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ASP.NET Core RC2 MVC6 和 IIS7 获取当前 Windows 用户
如何在 ASP.NET CORE 3.0 中配置路由以使用带有 [FromQuery] 参数的重载 [HttpGet] 方法?
如何在 ASP NET CORE 3.0 中获取当前登录的用户 ID?