每次请求到达时,AuthorizationFilterAttribute的OnAuthorization方法都会执行?

时间:2015-06-19 07:33:48

标签: c# asp.net-web-api

我正在编写用于访问另一个REST API的Web API(v2.2)。原因是我想限制一些功能并提供更友好的数据。总之,我正在为一些REST API编写包装器。 我通过 protected void Application_Start() { GlobalConfiguration.Configuration.MessageHandlers .Add(new BasicAuthMessageHandler(){ PrincipalProvider = new DummyPrincipalProvider() }); //... } 的实施提供身份验证/授权。这是代码片段:

AuthorizationFilterAttribute

现在我想明白,如果我将public override void OnAuthorization(HttpActionContext actionContext) { var authorizeHeader = actionContext.Request.Headers.Authorization; if (authorizeHeader != null && authorizeHeader.Scheme.Equals("basic", StringComparison.OrdinalIgnoreCase) && String.IsNullOrEmpty(authorizeHeader.Parameter) == false) { // Code to test is username/password correct for second API // Trying to get some recourse with provided credentials // ... } } 设置为控制器的动作,就像这样:

attribute

每当我请求此操作时,[HttpGet] [Route("{taskId}/{dispatchId}")] [SecureResourceAttribute] // This is my attribute public IHttpActionResult GetDispatch(string taskId, string dispatchId) 方法都会执行?在任何地方存储该客户端是否已获得授权? 如果否,我如何才能存储该客户端已获得授权?

谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

问:每次通话都会调用OnAuthorization吗?

答:如果控制器使用[授权]属性修饰,是。

问:在任何地方存储该客户端是否已获得授权?

答:不会。默认情况下,该服务是无状态的。

问:如果否,我如何才能存储该客户已获得授权?

答:这再次回到WEB API服务是无状态的事实,并且不同请求之间没有任何关系。