2016-08-16 4 views
0

В моем WebAPI, если я обнаруживаю плохую авторизацию, я использую следующее:Возврат 401 Неавторизованный из WebAPI

[HttpPost] 
    public HttpResponseMessage CustomerQuotationComplete(Guid apiKey, int EnquiryId, int SiteId, bool accepted) 
    { 
     if (IsRequestAuthorized()) 
     { 
     ... 
     } 
     else 
     { 
      var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Bad Authentication" }; 
      throw new HttpResponseException(msg); 
     } 
    } 

Однако, на самом деле, я получаю ответ от 302 Найденный, а не 401 Несанкционированный.

Так что я делаю неправильно?

ответ

0

Попытки вернуть сообщение вместо thowing вне в Exeption:

var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Bad Authentication" }; 
return msg; 
+0

Это делает то же самое, что и выше. – Matt

+0

Имея аналогичный код, он возвращает http 401. Попробуйте посмотреть, не используете ли вы [Глобальные фильтры или спецификацию OWIN] (http://stackoverflow.com/questions/20149750/owin-unauthorised-webapi-call- return-login-page-rather-than-401) для входа в систему или для других целей, которые будут называться методом вашего контроллера. Попробуйте также простой пустой проект, чтобы подтвердить, что это связано с настройкой вашего проекта. – bsoulier

4

Вы можете вернуть Несанкционированный ответ

[HttpPost] 
    public IHttpActionResult CustomerQuotationComplete(Guid apiKey, int EnquiryId, int SiteId, bool accepted) 
    { 
     if (IsRequestAuthorized()) 
     { 
     ... 
     } 
     else 
     { 
      return this.Unauthorized(); 
     } 
    } 
+0

К сожалению, вы не можете преобразовать this.Unauthorized (Http.Results.UnauthorisedResult), чтобы напечатать HttpresponseMessage – Matt

+0

См. Отредактированный пример. Изменен тип возврата к IHttpActionResult –

+0

Это тоже не имеет значения. Все это очень странно, должно быть так же справедливо в проекте, что приводит к неожиданному результату. – Matt

Смежные вопросы