5

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

4

2 回答 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 回答