我在启用 MVC4 Forms 身份验证的网站内运行 web-api webservice。Forms 身份验证应用程序使用 web-api web 服务。我已经使用 [Authorize] 属性保护了 web-api。现在,当我在授权票证过期时从 MVC4 应用程序调用 web-api时,我得到了一个丑陋的浏览器类型的登录对话框(不适用于表单身份验证)。我没有在我的开发机器(IIS7.5)上得到这个,我不太明白!如何防止出现此对话框?我只需要收到401。
问问题
2589 次
2 回答
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,则由您决定必须做什么。
希望这可以帮助。
于 2012-10-23T09:56:06.160 回答
0
将站点移动到 IIS8 服务器,现在问题已经消失了......
于 2013-02-05T15:13:16.820 回答