如何确定IResourceFilter中的Controller名称和Action名称?

Loc*_*Loc 3 c# asp.net-core

我正在编写一个 ASP.NET Core 资源过滤器,我想禁用 OnResourceExecuting 方法中某些控制器/操作的处理。

我在Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext类中找不到任何 api 来获取控制器名称和操作名称。

有人有什么想法吗?谢谢!

Tse*_*eng 5

包含ResourceExecutingContext一个ActionDescriptor属性 ( docs )。

Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor这是or的基类Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor

因此,当您将其转换为ControllerActionDescriptordocs)时,您可以访问ControllerNameActionName属性。

if(resourceContext.ActionDescriptor is ControllerActionDescriptor controllerDescriptor)
{
    var controllerName = controllerDescriptor.ControllerName;
}
Run Code Online (Sandbox Code Playgroud)