在401上阻止浏览器身份验证对话框

时间:2012-10-22 19:33:45

标签: asp.net-mvc-4 iis-6 authorization asp.net-web-api

我正在启用MVC4 Forms身份验证的网站中运行web-api webservice。 Forms身份验证应用程序使用web-api webservices。 我使用[Authorize]属性保护了web-api。 现在当我在授权凭证到期时从MVC4应用程序调用web-api时我得到了一个丑陋的浏览器登录对话框(它不能用于表单身份验证)。 我没有在我的开发机器(IIS7.5)上得到这个,我真的不明白! 如何阻止此对话框出现?我只需要收到401.

2 个答案:

答案 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服务器,现在问题已经消失......