0

我正在构建一个 MVC5 Web 应用程序,其中 Web API2 用于后端服务器调用,Angularjs 用于客户端代码。该应用程序正在使用 Windows 身份验证。对于 Web API 控制器中的某些方法,我已在特定用户角色上设置了 Authorize 属性。问题是当身份验证失败时,它会弹出 Windows 安全对话框供用户登录。有没有办法阻止此对话框出现并重定向到特定 URL 或返回失败状态代码和错误消息?

我在网上搜索并找到了 OWIN 身份验证的解决方案,但没有找到 Windows 身份验证的解决方案。

4

1 回答 1

0

在 Asp.Net Web API 中创建一个消息处理程序,您可以在其中删除 WWW-Authenticate 标头,这样浏览器就不会弹出窗口。您可以在此级别进行许多自定义。

要创建您自己的消息处理程序,您需要扩展DelegatingHandler以下内容

 public class MyHandler : DelegatingHandler
 {
       protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
       {

               //Your code goes here
               var response = await base.SendAsync(request,cancellationToken);
               if(response.StatusCode == HttpStatusCode.Unauthorized)
               {
                  // remove WWW-Authenticate from the header and add Location header to redirect to a page
                   OR
                 // Create a new response and then return that response
               }
               return response;

       }

 }
于 2016-06-08T16:43:31.587 回答