2016-02-09 3 views
1

Я кодирую C# webservice, используя Web API 2, и хотел бы иметь возможность отправить StatusCode из Unauthorized клиенту, если у клиента нет авторизированных правильных учетных данных.Как вернуть statusCode клиенту из веб-службы?

Вот код ApiController фильтр:

public class ApiAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool IsAuthorized(HttpActionContext actionContext) 
    { 
     if (HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      return true; 
     } 
     else 
     { 
      var httpResponseMessage = new HttpResponseMessage(); 
      httpResponseMessage.StatusCode = System.Net.HttpStatusCode.Unauthorized; 
      actionContext.Response = httpResponseMessage; 
      return false; 
     } 
    } 
} 

Вот HttpClient код:

private async Task<bool> RequestAuthorizeAsync(string serverAddress) 
{ 
    using (HttpClient client = new HttpClient()) 
    { 
     using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, serverAddress)) 
     { 
      request.Headers.Authorization = null; 
      using (HttpResponseMessage response = await client.SendAsync(request)) 
      { 
       if (response.StatusCode == HttpStatusCode.OK) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 
    } 
} 

Когда функция IsAuthorized возвращает false, с множеством httpResponseMessage объекта, то HttpClient все еще возвращая StatusCode из 200, а не StatusCode от 401.

Могу ли я, пожалуйста, помочь с возвратом StatusCode из 401 в HttpClient?

+0

Как и в сторону, ваш, если/иначе в клиентском коде можно изменить только «return response.StatusCode == HttpStatusCode.OK;'. –

+0

Вы подтвердили, что ваш код определенно называется, кстати? –

+0

Да, это называется. – user3736648

ответ

0

Заканчивать .Net-х JsonResult

Тогда вы можете просто вернуть Task<IHttpActionResult> как так ...

  if (response.StatusCode == HttpStatusCode.OK) 
      { 
       return Ok(); 
      } 
      else 
      { 
       return Unauthorized(); 
      }