You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6.0中AuthorizationFilterContext获取控制器实例及方法名咨询

.NET 6.0中AuthorizationFilter获取控制器实例及方法名的解决方案

在.NET 6.0的AuthorizationFilter中,AuthorizationFilterContext无法直接像旧版MVC 5那样获取控制器实例和方法名,可通过以下方式实现:

获取方法名与控制器类型

将ActionDescriptor强转为ControllerActionDescriptor(仅针对控制器中的Action),即可获取相关信息:

public void OnAuthorization(AuthorizationFilterContext context)
{
    if (context.ActionDescriptor is ControllerActionDescriptor actionDescriptor)
    {
        // 获取被修饰的方法名称
        string actionName = actionDescriptor.ActionName;
        // 获取控制器的类型
        Type controllerType = actionDescriptor.ControllerTypeInfo.AsType();
    }
}

获取控制器实例

注意:在OnAuthorization执行阶段,框架尚未完成控制器的实例化,若需获取实例,需通过依赖注入容器或反射方式创建:

public void OnAuthorization(AuthorizationFilterContext context)
{
    if (context.ActionDescriptor is ControllerActionDescriptor actionDescriptor)
    {
        Type controllerType = actionDescriptor.ControllerTypeInfo.AsType();
        
        // 方式1:通过HttpContext的依赖注入容器获取实例(推荐,支持构造函数注入)
        var controllerInstance = context.HttpContext.RequestServices.GetService(controllerType);
        
        // 方式2:若控制器有无参构造函数,可直接反射实例化(不推荐,无法处理依赖注入)
        // var controllerInstance = Activator.CreateInstance(controllerType);
    }
}

注意事项

  • 强转ControllerActionDescriptor前需做类型判断,避免非控制器Action场景(如Razor Page)出现异常。
  • 通过依赖注入获取控制器实例时,需确保控制器的所有依赖已在DI容器中注册,否则会返回null。

内容的提问来源于stack exchange,提问作者Marcelo Myara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:25:39