我在Authorization Attribute中阅读了有关autofac的帖子。在了解delegate factory in my previous post的情况下,我想问一下,是否可以从自定义授权属性中解析依赖关系。
这是我的代码:
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;
}
}
请注意,我想在AuthorizeAttribute
中进行令牌处理。问题是,处理不会返回boolean
,而是MyUserAcesss
的对象将在后续查询中使用。
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());
}
请注意,在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。