如何使用 ASP.NET Core 获取当前路由名称?
How can I get the current route name with ASP.NET Core?
我有一个在 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);
}
}
如何在操作and/or视图中获取路由名称?
在控制器内部,您可以读取 AttributeRouteInfo
from the ControllerContext
's ActionDescriptor
. AttributeRouteInfo
has a Name
属性,其中包含您要查找的值:
public ActionResult Act(ActVM viewModel)
{
switch (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name)
{
// ...
}
return View(viewModel);
}
在 Razor 视图中,ActionDescriptor
可通过 ViewContext
属性:
@{
var routeName = ViewContext.ActionDescriptor.AttributeRouteInfo.Name;
}
对我来说,@krik-larkin 的回答没有用,因为 AttributeRouteInfo
在我的情况下总是 null。
我改用了以下代码:
var endpoint = HttpContext.GetEndpoint() as RouteEndpoint;
var routeNameMetadata = endpoint?.Metadata.OfType<RouteNameMetadata>().SingleOrDefault();
var routeName = routeNameMetadata?.RouteName;
对 Kirk Larkin 回答的小修正。有时您必须使用模板 属性 而不是名称:
var ari = ControllerContext.ActionDescriptor.AttributeRouteInfo;
var route = ari.Name ?? ari.Template;
我有一个在 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);
}
}
如何在操作and/or视图中获取路由名称?
在控制器内部,您可以读取 AttributeRouteInfo
from the ControllerContext
's ActionDescriptor
. AttributeRouteInfo
has a Name
属性,其中包含您要查找的值:
public ActionResult Act(ActVM viewModel)
{
switch (ControllerContext.ActionDescriptor.AttributeRouteInfo.Name)
{
// ...
}
return View(viewModel);
}
在 Razor 视图中,ActionDescriptor
可通过 ViewContext
属性:
@{
var routeName = ViewContext.ActionDescriptor.AttributeRouteInfo.Name;
}
对我来说,@krik-larkin 的回答没有用,因为 AttributeRouteInfo
在我的情况下总是 null。
我改用了以下代码:
var endpoint = HttpContext.GetEndpoint() as RouteEndpoint;
var routeNameMetadata = endpoint?.Metadata.OfType<RouteNameMetadata>().SingleOrDefault();
var routeName = routeNameMetadata?.RouteName;
对 Kirk Larkin 回答的小修正。有时您必须使用模板 属性 而不是名称:
var ari = ControllerContext.ActionDescriptor.AttributeRouteInfo;
var route = ari.Name ?? ari.Template;