Asp.net mvc 4 阻止401上的浏览器身份验证对话框
我正在一个MVC4表单认证支持的网站中运行一个web api web服务。表单身份验证应用程序使用web api web服务。 我已经用[Authorize]属性保护了web api。 现在,当我在授权票证过期时从MVC4应用程序调用web api时,我得到了一个丑陋的浏览器类型的登录对话框(它不适用于表单身份验证)。 我没有在我的开发机器(IIS7.5)上得到这个,我真的不明白!Asp.net mvc 4 阻止401上的浏览器身份验证对话框,asp.net-mvc-4,iis-6,authorization,asp.net-web-api,Asp.net Mvc 4,Iis 6,Authorization,Asp.net Web Api,我正在一个MVC4表单认证支持的网站中运行一个web api web服务。表单身份验证应用程序使用web api web服务。 我已经用[Authorize]属性保护了web api。 现在,当我在授权票证过期时从MVC4应用程序调用web api时,我得到了一个丑陋的浏览器类型的登录对话框(它不适用于表单身份验证)。 我没有在我的开发机器(IIS7.5)上得到这个,我真的不明白! 如何防止出现此对话框?我只需要领取401 John Galloway在(极力推荐的手表)的屏幕上很好地解释了这一点
如何防止出现此对话框?我只需要领取401 John Galloway在(极力推荐的手表)的屏幕上很好地解释了这一点 对于某些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,则由您决定必须执行的操作
希望这能有所帮助。将站点移动到IIS8服务器,现在问题已经解决了…可能重复了该帖子和其他许多帖子,但没有找到任何解决方案或解释为什么它可以在我的开发机器上运行,而不能在IIS6服务器上运行。您是否使用了正确版本的AuthorizeAttribute?您应该为Web API使用System.Web.Http.AuthorizeAttribute,而不是System.Web.Mvc.AuthorizeAttribute。他们有非常不同的行为。这已经是我正在做的,但它仍然给我浏览器弹出窗口。这是我的代码:是的,您可以更改
self.location='/Account/Login/'
并在这里插入您想要的行为