ASP.NET Web API: правильный способ возврата 401 / несанкционированного ответа

У меня есть веб-сайт MVC, который использует аутентификацию OAuth / token для аутентификации запросов. Все соответствующие controllerы имеют нужные атрибуты, а проверка подлинности работает нормально.

Проблема в том, что не весь запрос может быть разрешен в области атрибута – некоторые проверки авторизации должны выполняться в коде, который вызывается методами controllerа. Каков правильный способ вернуть 401 несанкционированный ответ в этом случае?

Я попробовал throw new HttpException(401, "Unauthorized access"); , но когда я делаю это, код статуса ответа – 500, и я получаю также трассировку стека. Даже в нашем logging DelegatingHandler мы видим, что ответ 500, а не 401.

Вы должны выбрасывать HttpException HttpResponseException из вашего метода API, а не HttpException :

 throw new HttpResponseException(HttpStatusCode.Unauthorized); 

Или, если вы хотите предоставить специальное сообщение:

 var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" }; throw new HttpResponseException(msg); 

Просто верните следующее:

 return Unauthorized(); 

Вы получаете код ответа 500, потому что вы выбрасываете исключение ( HttpException ), которое указывает на какую-либо ошибку сервера, это неправильный подход.

Просто установите код состояния ответа .eg

 Response.StatusCode = (int)HttpStatusCode.Unauthorized; 

В качестве альтернативы другим ответам вы также можете использовать это:

  return Content(HttpStatusCode.Unauthorized, "My error message"); 

По-видимому, причина фразы довольно необязательна ( может ли HTTP-ответ пропустить фразу разума? )

  • Невозможно подключить Nexus 4 к adb: unauthorized
  • Пользовательская авторизация в Asp.net WebApi - какой беспорядок?
  • Как вызвать веб-службу RESTful с Android?
  • Как я могу тестировать метод controllerа, который имеет атрибут ?
  • Рекомендации по защите REST API / веб-службы
  • Как обрабатывать аутентификацию / авторизацию с пользователями в базе данных?
  • Как OAuth 2 отличается от OAuth 1?
  • Аутентификация на основе токенов в ядре ASP.NET (обновлена)
  • Маршрутизация и токен аутентификации AngularJS с webapi
  • Авторизация ASP.NET MVC
  • Interesting Posts

    Как заблокировать программу от доступа к Интернету?

    Типы с плавающей запятой с фиксированным размером

    Android SAF (Storage Access FrameWork): получите конкретный файл Uri от TreeUri

    Как программно спарить Bluetooth-устройство на Android

    Получение измененного имени из измененного имени

    Всплывающее окно по внешнему экрану входящих вызовов Android, например, приложение для Android-звонящего

    Какое программное обеспечение хорошо работает для просмотра массивных изображений TIFF в Windows 7?

    Как я могу навсегда скрыть значки в области уведомлений?

    Как сделать глубокую копию Java ArrayList

    Чтение из файлов .msg

    Найти самую последнюю дату ID с несколькими записями в листе Excel

    Как я могу получить управление + стрелка влево, чтобы вернуться к одному слову в iTerm2?

    Выберите изменение стиля стрелки

    Как я могу получить идентификатор канала с YouTube?

    AngularJS не обнаруживает заголовок Access-Control-Allow-Origin?

    Давайте будем гением компьютера.