2012-02-18 2 views
1

У меня есть обработчик операций, который проверяет для аутентификации и генерирует исключение при неудачной аутентификации с использованиемWebAPI возвращает код неверный статус

throw new WebFaultException(HttpStatusCode.Unauthorized); 

Однако это по-прежнему возвращает 404 не найден код состояния клиента/тестового клиента.

Это моя работа обработчика

public class AuthOperationHandler : HttpOperationHandler<HttpRequestMessage, HttpRequestMessage> 
{ 
    RequireAuthorizationAttribute _authorizeAttribute; 

    public AuthOperationHandler(RequireAuthorizationAttribute authorizeAttribute) : base("response") 
    { 
     _authorizeAttribute = authorizeAttribute; 
    } 

    protected override HttpRequestMessage OnHandle(HttpRequestMessage input) 
    { 
     IPrincipal user = Thread.CurrentPrincipal; 

     if (!user.Identity.IsAuthenticated) 
      throw new WebFaultException(HttpStatusCode.Unauthorized); 

     if (_authorizeAttribute.Roles == null) 
      return input; 

     var roles = _authorizeAttribute.Roles.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); 

     if (roles.Any(role => user.IsInRole(role))) 
      return input; 

     throw new WebFaultException(HttpStatusCode.Unauthorized); 
    } 
} 

Я делаю что-то не так?

ответ

1

У меня есть хорошие и плохие новости для вас. Рамка, которую вы используете, превратилась в ASP.NET Web API. К сожалению, OperationHandlers больше не существует. Их ближайшим эквивалентом являются ActionFilters.

Сказав это, WCF Web API никогда не поддерживал выброс WebFaultException, что является следствием SOAP-наследия WCF. Я думаю, что исключение было вызвано HttpWebException, однако я никогда не использовал его, я просто установил код состояния для ответа.

+0

Это не сулит ничего хорошего, я собирался перенести свой api (на основе предварительного просмотра 6) на бета-версию завтра. У меня есть обработчик проверки на основе обработчика операции :( –

+0

@AntonyScott ActionFilters способны делать большую часть того, что вы можете делать с OperationHandlers. –

+0

hmm okay. Похоже, что завтра у меня есть переписывание :) –

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