Как вернуть ошибку аутентификации 401 клиенту RestSharp? - PullRequest
4 голосов
/ 19 января 2012

В моем контроллере Mvc Api, если пользователь не может быть аутентифицирован, я выбрасываю HttpException 401. Однако клиент RestSharp, кажется, переводит это в код статуса Http 500.

Я хочу иметь возможность генерировать исключения HttpException из моего контроллера Mvc, и чтобы клиент RestSharp сохранил исходную ошибку в своем свойстве StatusCode.

Кроме того, я замечаю, что если сервер не работает, когда клиент RestSharp делает запрос, ответ имеет код состояния 0 и код ответа Error. Если RestSharp не возвращает вместо этого код ошибки http 404?

Что мне действительно нужно, так это немного документации о том, как RestSharp работает с HttpCodes.

Обновлено с кодом в моем контроллере API:

throw new HttpException((int)HttpStatusCode.Unauthorized, AuthenticationError);

Ответы [ 4 ]

11 голосов
/ 19 января 2012

Вы подтвердили, что действительно вернули 401 клиенту?ASP.NET MVC иногда обрабатывает некоторые странные ошибки.

Попробуйте вместо этого вернуть HttpUnauthorizedResult. MSDN документ

4 голосов
/ 06 февраля 2012

Я смог исследовать эту проблему сам. Проверка подлинности с помощью форм устанавливается в веб-приложении, что означает, что при возврате HttpUnauthorizedResult из контроллера MVC запускает и перенаправляет на страницу входа. Это приводит к тому, что клиент полагает, что ошибок не было.

Я решил эту проблему с помощью aspnet.suppressformsredirect пакета nuget и добавил флаг подавления в ответ для аутентификации.

3 голосов
/ 19 октября 2016

Вот два способа вернуть 401 в MVC.

return new HttpUnauthorizedResult("Unauthorized");

или

return new HttpStatusCodeResult(401);
0 голосов
/ 07 мая 2015

Хром, Хром, Хром, что мы должны загрузить пакет NuGet, чтобы вернуть 401!Мой обходной путь - ответить 403 Forbidden объяснением:

throw new HttpException((int)HttpStatusCode.Forbidden, 
  "Please log in as user " + UserId + " and try again.");

Не семантически правильно, но это меньше работы, меньше текущего обслуживания и меньше риска.

...