如何在IResourceFilter中确定控制器名称和操作名称?

时间:2018-09-07 20:26:18

标签: c# asp.net-core

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

Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext类中找不到任何用于获取控制器名称和动作名称的api。

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

1 个答案:

答案 0 :(得分:3)

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

这是Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptorMicrosoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor的基类。

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

if(resourceContext.ActionDescriptor is ControllerActionDescriptor controllerDescriptor)
{
    var controllerName = controllerDescriptor.ControllerName;
}