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