OnAuthorization在返回未授权状态时被称为两次

时间:2018-02-12 21:47:20

标签: c# asp.net asp.net-web-api asp.net-identity authorize-attribute

我已经实现了自己的<button type:"submit" value:"Refresh/>,因为我通过cookie传递了授权令牌。

AuthorizeAttribute

我的问题public class ValidateToken : AuthorizeAttribute { public override void OnAuthorization(HttpActionContext actionContext) { var headers = actionContext.Request.Headers; CookieHeaderValue authToken = headers.GetCookies().FirstOrDefault(); CookieState authCookie = authToken.Cookies.Where(p => p.Name == "AUTH-TOKEN").FirstOrDefault(); actionContext.Request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authCookie.Value); bool isAuth = base.IsAuthorized(actionContext); if (!base.IsAuthorized(actionContext)){ HandleUnauthorizedRequest(actionContext); } } protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) { actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); } } ,当我返回HandleUnauthorizedRequest时,再次调用函数HttpStatusCode.Unauthorized,然后在验证后调用OnAuthorization失败。在第二次调用时,Web API以HandleUnauthorizedRequest返回,但是我在前端获得了登录屏幕 enter image description here

我不想要一个。我只想像往常一样返回401。奇怪的是,如果我用401替换HttpStatusCode.Unauthorized,那么该函数不会被第二次调用并立即返回。

修改我发现HttpStatusCode.Forbidden被调用了两次并显示了登录表单,因为在Angular中我正在为我的Cookie传递OnAuthorization。所以我需要弄清楚withCredentials: true导致这种情况的原因。

1 个答案:

答案 0 :(得分:0)

确保匿名身份验证 启用 Windows身份验证 禁用

# result method
Object::r = (v) ->
    s=@
    st='global.'+v+'={'+'s'+'}'
    re=(eval st)
    str='global.'+v+'=re["s"]'
    eval(str)
    @


[1..10].r('a').
    map( (v) -> 'lorem_ipsum_'+v.toString() ).r('ar').
    join("__").r('s').
    split("__").reverse().r('arr')

console.log("\n")
console.log(a); console.log("\n")
console.log(ar); console.log("\n")
console.log(s); console.log("\n")
console.log(arr); console.log("\n")