0

Я создаю веб-приложение MVC5 с Web API2 для обратных вызовов сервера и Angularjs для кода на стороне клиента. Приложение использует проверку подлинности Windows. Для некоторых методов в контроллере Web API я установил атрибут Authorize для определенной роли пользователя. Проблема в том, что когда аутентификация завершилась неудачно, она открывает диалоговое окно «Безопасность Windows» для входа в систему. Есть ли способ предотвратить появление этого диалогового окна и перенаправление на определенный URL-адрес или возврат кода отказа и сообщения об ошибке?Как предотвратить перенаправление 302 с помощью проверки подлинности Windows

Я искал в Интернете и нашел решения для аутентификации OWIN, но не проверки подлинности Windows.

ответ

0

Создайте обработчик сообщений в веб-API Asp.Net, где вы можете удалить заголовок 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; 

     } 

} 
+0

это работает. Благодаря! – user1214916

+0

Я могу заставить его работать, если создаю новый ответ, но что делать, если я хочу сохранить статус 401? Я смотрю на response.Headers.WwwAuthenticate, который пуст, и response.Location является нулевым. – user1214916