У меня есть обработчик операций, который проверяет для аутентификации и генерирует исключение при неудачной аутентификации с использованием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);
}
}
Я делаю что-то не так?
Это не сулит ничего хорошего, я собирался перенести свой api (на основе предварительного просмотра 6) на бета-версию завтра. У меня есть обработчик проверки на основе обработчика операции :( –
@AntonyScott ActionFilters способны делать большую часть того, что вы можете делать с OperationHandlers. –
hmm okay. Похоже, что завтра у меня есть переписывание :) –