Autofac是否可以在自定义授权过滤器属性之前解析,然后才能在ApiController中使用?

时间:2018-03-23 03:40:06

标签: asp.net-web-api2 httprequest autofac

我在Authorization Attribute中阅读了有关autofac的帖子。在了解delegate factory in my previous post的情况下,我想问一下,是否可以从自定义授权属性中解析依赖关系。

这是我的代码:

  1. CustomAuthorizationFilterAttribute : AuthorizeAttribute

    protected override bool IsAuthorized(HttpActionContext actionContext)
        {
            try
            {
                var token = actionContext.Request.GetHeader("Authorization");
                MyUserAccess userAccess = myAccessHelper.GetUserAccess(token);
    
                //Note that I am adding another property to Request in order to allow the controller to access it
                actionContext.Request.Properties.Add(REQUEST_KEY_USERACCESS, userAccess); 
    
                return true;
            }
            catch(Exception ex)
            {
                return false;
            }
        }
    
  2. 请注意,我想在AuthorizeAttribute中进行令牌处理。问题是,处理不会返回boolean,而是MyUserAcesss的对象将在后续查询中使用

    1. MyController : ApiController

      private ServiceData.Factory myServiceFactory;
      public MyController(ServiceData.Factory myServiceFactory)
      {
          this.myServiceFactory = myServiceFactory;
      }
      
      public IHttpActionResult GetData([FromUri] MyFilter filter)
      {
          Object myUserAccess;
          bool hasObject = Request.Properties.TryGetValue(REQUEST_KEY_USERACCESS, myUserAccess);
          if (!hasObject)
              return Content(HttpStatusCode.Forbidden, "No User Access");
      
          var myService = myServiceFactory.Invoke((MyUserAccess)myUserAccess);
          return Ok(myService.GetSomething());
      }
      
    2. 请注意,在Web API中,我必须执行" TryGetValue",并在现场解析服务(在转换数据类型之后)。逻辑有效。但是,我很好奇,我可以把那部分拿走吗? (因为它看起来很重复)理想情况下,我想实现以下目标:

          public IHttpActionResult GetData([FromUri] MyFilter filter)
          {
              return Ok(myService.GetSomething());
          }
      

      也就是说,只要它登陆ApiController功能,就定义了服务。我只需要使用它。想知道Autofac是否能够做到这一点?

      P.S。:

      概括问题: "是否可以实时解析(A类中的对象X)的依赖关系,后来可以在B类中使用? (所以在B类中,不需要调用Invoke)

      P.S.2:

      我了解到除了添加属性之外,我们还能够将该参数传递给控制器​​'通过ControllerContext from this post

0 个答案:

没有答案