从 AuthorizationHandlerContext 对象获取控制器和操作名称
Get controller and action name from AuthorizationHandlerContext object
您好,我有一个接受 AuthorizationHandlerContext context
参数的自定义需求处理程序
当我调试时,我可以看到上下文对象包含
Context.Resources.ActionDescription.ActionName
但是在编写代码时我无法超越
Context.Resources
似乎下层没有暴露。我想获取调用处理程序的操作名称和控制器名称。我该怎么做?
var mvcContext = context.Resource as AuthorizationFilterContext;
var descriptor = mvcContext?.ActionDescriptor as ControllerActionDescriptor;
if (descriptor != null)
{
var actionName = descriptor.ActionName;
var ctrlName = descriptor.ControllerName;
}
即使问题被标记为 asp.net-mvc,我想补充一点,@AdemCaglin 的回答不适用于 Web API 控制器。以下代码适用于 API 和 MVC 控制器:
var endpoint = context.Resource as RouteEndpoint;
var descriptor = endpoint?.Metadata?
.SingleOrDefault(md => md is ControllerActionDescriptor) as ControllerActionDescriptor;
if (descriptor == null)
throw new InvalidOperationException("Unable to retrieve current action descriptor.");
var controllerName = descriptor.ControllerName;
var actionName = descriptor.ActionName;
升级到 dotnet 5 后,我在 中成功使用的解决方案停止工作。以下解决方法现在适用于我:
var routeValues = (context.Resource as HttpContext).Request.RouteValues;
var controllerName = routeValues["controller"].ToString();
var actionName = routeValues["action"].ToString();
请注意,这应该包括一些空值检查等。以上是一个准系统示例。
您好,我有一个接受 AuthorizationHandlerContext context
参数的自定义需求处理程序
当我调试时,我可以看到上下文对象包含 Context.Resources.ActionDescription.ActionName
但是在编写代码时我无法超越 Context.Resources
似乎下层没有暴露。我想获取调用处理程序的操作名称和控制器名称。我该怎么做?
var mvcContext = context.Resource as AuthorizationFilterContext;
var descriptor = mvcContext?.ActionDescriptor as ControllerActionDescriptor;
if (descriptor != null)
{
var actionName = descriptor.ActionName;
var ctrlName = descriptor.ControllerName;
}
即使问题被标记为 asp.net-mvc,我想补充一点,@AdemCaglin 的回答不适用于 Web API 控制器。以下代码适用于 API 和 MVC 控制器:
var endpoint = context.Resource as RouteEndpoint;
var descriptor = endpoint?.Metadata?
.SingleOrDefault(md => md is ControllerActionDescriptor) as ControllerActionDescriptor;
if (descriptor == null)
throw new InvalidOperationException("Unable to retrieve current action descriptor.");
var controllerName = descriptor.ControllerName;
var actionName = descriptor.ActionName;
升级到 dotnet 5 后,我在
var routeValues = (context.Resource as HttpContext).Request.RouteValues;
var controllerName = routeValues["controller"].ToString();
var actionName = routeValues["action"].ToString();
请注意,这应该包括一些空值检查等。以上是一个准系统示例。