栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

未经授权的webapi调用返回登录页面而不是401

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

未经授权的webapi调用返回登录页面而不是401

有两种AuthorizeAttribute实现,您需要确保为Web API引用了正确的实现。有
System.Web.Http.AuthorizeAttribute
这是用于Web
API的,并且 System.Web.Mvc.AuthorizeAttribute 这是用来与视图控制器。
如果授权失败,则 Http.AuthorizeAttribute 将返回401错误,并且 Mvc.AuthorizeAttribute
将重定向到登录页面。

更新于11/26/2013

因此,正如布罗克·艾伦(Brock Allen)在他的文章中指出的那样,随着MVC
5的出现,情况发生了巨大变化。我猜想OWIN管道会接管并引入一些新行为。现在,当未授权用户时,将在HTTP标头中返回状态200和以下信息。

X-Responded-JSON: {"status":401,"headers":{"location":"http://localhost:59540/Account/Login?ReturnUrl=%2Fapi%2FTestBasic"}}

您可以在客户端更改逻辑,以检查标头中的此信息以确定如何处理此信息,而不是在错误分支上查找401状态。

我试图通过在 OnAuthorizationHandleUnauthorizedRequest 方法的响应中设置状态来覆盖自定义
AuthorizeAttribute中 的此行为。

actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);

但这没有用。新管道必须稍后再获取此响应,并将其修改为我之前获得的响应。抛出HttpException也不起作用,因为它只是更改为500错误状态。

我测试了Brock Allen的解决方案,当我使用jQuery
ajax调用时它确实起作用。如果它对您不起作用,我猜是因为您使用的是角度。用Fiddler运行测试,看看标题中是否包含以下内容。

X-Requested-With: XMLHttpRequest

如果不是,那就是问题所在。我不熟悉angular,但是如果它允许您插入自己的标头值,然后将其添加到您的ajax请求中,则它可能会开始工作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号