我正在启用MVC4 Forms身份验证的网站中运行web-api webservice。 Forms身份验证应用程序使用web-api webservices。 我使用[Authorize]属性保护了web-api。 现在当我在授权凭证到期时从MVC4应用程序调用web-api时我得到了一个丑陋的浏览器登录对话框(它不能用于表单身份验证)。 我没有在我的开发机器(IIS7.5)上得到这个,我真的不明白! 如何阻止此对话框出现?我只需要收到401.
答案 0 :(得分:0)
John Galloway在ASP.NET Web API - Authorization(强烈推荐的手表)的截屏视频中很好地解释了这一点
对于某些api控制器,如下所示,您在其上使用了Authorize
属性。
[Authorize]
public class CommentsController : ApiController
{
...
}
他说,如果客户端发出未经授权的请求,AuthorizationFilter会对HTTP API执行唯一有意义的操作 - 它返回HTTP状态代码401,需要授权。同样,我们回到了使用HTTP作为API的价值 - 我们不需要安排任何事情,任何平台上的任何客户端都将知道HTTP 401响应意味着什么。
由客户决定在获得401时要做什么。在这个基于JavaScript /浏览器的示例中,我们只需重定向到客户端的登录页面。
$(function () {
$("#getCommentsFormsAuth").click(function () {
viewModel.comments([]);
$.ajax({ url: "/api/comments",
accepts: "application/json",
cache: false,
statusCode: {
200: function(data) {
viewModel.comments(data);
},
401: function(jqXHR, textStatus, errorThrown) {
self.location = '/Account/Login/';
}
}
});
});
});
在这个示例中,如果遇到401,由您决定要做什么。
希望这有帮助。
答案 1 :(得分:0)
将网站移至IIS8服务器,现在问题已经消失......