如何使用Windows身份验证防止302重定向

时间:2016-06-08 16:22:00

标签: angularjs asp.net-web-api2 asp.net-mvc-5 asp.net-authentication

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

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

1 个答案:

答案 0 :(得分:0)

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

要创建自己的Message Handler,您需要扩展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;

       }

 }