在 AuthorizeAttribute Mvc Core Web 中获取 Controller 实例 Api

Get Controller instance in AuthorizeAttribute Mvc Core Web Api

我在下面使用 class 来控制我的 api 方法请求并设置 BaseController class 的一些属性以在方法中常用。 这个来自 Asp.Net Mvc Web Api

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class AuthUserAttribute : AuthorizeAttribute
{

    private string Action { get; set; }

    public AuthUserAttribute(string action)
    {
        this.Action = action;
    }

    public override void OnAuthorization(HttpActionContext actionContext)
    {
        BaseController baseController = httpContext.ControllerContext.Controller as BaseController;
        baseController.someCommenProperty = someValue;
    }
}

但是当我试图在 Asp.Net Mvc Core Api 中实现相同的结构时 我无法到达初始化的控制器实例。 我有什么办法可以得到那个实例吗?

使用Microsoft.AspNetCore.Authorization;

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Primitives;
using System;
using System.Linq;

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class AuthUserAttribute : AuthorizeAttribute, IAuthorizationFilter
{


    private string Action { get; set; }
    public AuthUserAttribute(string action)
    {
        this.Action = action;
    }



    public void OnAuthorization(AuthorizationFilterContext context)
    {
        // how to get controller instance from context
    }
}

您可以使用context.ActionDescriptor获取控制器的类型信息。
控制器对象可能在授权检查时根本没有被实例化。
您还可以实施 IActionFilter 并在其中使用控制器实例

public void OnActionExecuting(ActionExecutingContext context)

public void OnActionExecuted(ActionExecutingContext context)