Get controller and action name from AuthorizationHandlerContext object

After upgrading to dotnet 5, the solution I was successfully using from Carsten above stopped working. The following workaround now works for me:

var routeValues = (context.Resource as HttpContext).Request.RouteValues;
var controllerName = routeValues["controller"].ToString();
var actionName = routeValues["action"].ToString();

Note this should include some null checks etc. the above is a barebones example.


Even though the question is tagged for asp.net-mvc, I wanted to add that the answer by @AdemCaglin does not work for Web API controllers. The following code works for both, API and MVC controllers:

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;

var mvcContext = context.Resource as AuthorizationFilterContext;
var descriptor = mvcContext?.ActionDescriptor as ControllerActionDescriptor;
if (descriptor != null)
{
    var actionName = descriptor.ActionName;
    var ctrlName = descriptor.ControllerName;      
}