2017-05-11 101 views
0

所以我做了一个测试,看看当我通过两个授权头(方案基本和持有者)向邮递员发送一个请求到我的api时会发生什么。我创建了一个授权筛选器属性:web api:有两个授权头的请求最后没有结果

public class RestrictAccessToAssignedManagers : System.Web.Http.Filters.AuthorizationFilterAttribute 
{ 
    public override bool AllowMultiple 
    { 
     get { return false; } 
    } 

    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     //Perform your logic here 
     base.OnAuthorization(actionContext); 
    } 
} 

并将此属性分配给我的控制器。

问题是,当我使用这两个授权时,在我的授权过滤器中,请求中的授权标头为空。

下面是我从邮递员发出请求: enter image description here

这里是从小提琴手请求:

GET http://localhost:2328/api/values HTTP/1.1 
Host: localhost:2328 
Connection: keep-alive 
Authorization: Basic aaa, Bearer bbb 
Cache-Control: no-cache 
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36 
Postman-Token: 0f557417-d0b7-4ca9-7df7-1df1ea0049ad 
Accept: */* 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-US,en;q=0.8 

我的问题是,为什么同时使用授权头有没有到结束我的授权筛选器属性?

+0

很可能框架拒绝具有多个值的请求标头,因此不填充对象。您必须检查框架源代码才能确定。 – Nkosi

+0

你能建议我应该寻找什么课程吗? –

回答

0

这个问题很可能是你如何检索标题值。使用你的Fiddler原始请求,我可以看到以下内容:

public override void OnAuthorization(HttpActionContext actionContext) 
{ 
    var authHeaders = actionContext.Request.Headers.GetValues("Authorization"); 
    // authHeaders = ["Basic aaa, Bearer bbb"] 

    var authHeader = actionContext.Request.Headers.Authorization; 
    // authHeader = null 

    base.OnAuthorization(actionContext); 
} 
+0

那么,最后,我们是否有这个请求的授权头? –

+0

你确实这样做,但这不是我所期望的。数组中只有一个标题,包括逗号的整个字符串。 – dharms