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

时间:2018-06-07 17:31:30

标签: c# asp.net-core asp.net-core-mvc controllercontext

我曾使用下面的类来控制我的api方法请求,并设置BaseController类的一些属性,以便在方法中使用。 这个是来自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
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用context.ActionDescriptor获取控制器上的 Type 信息。
在授权检查时,控制器对象可能根本没有实例化。
您可以另外实现IActionFilter并使用其中的控制器实例

public void OnActionExecuting(ActionExecutingContext context)

public void OnActionExecuted(ActionExecutingContext context)