Я нахожусь в процессе миграции довольно обширной службы REST из WCF в ASP.NET WebAPI.Мы используем заголовок авторизации для отправки токенов с клиента на сервер, и я реализовал DelegateHandler с кодом, который отвечает 401, как только он обнаруживает, что действительный заголовок авторизации отсутствует.Упрощение кода можно увидеть здесь:
public class AuthenticationHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request == null) throw new ArgumentNullException("request");
return !IsClientAuthorized(request)
? Task<HttpResponseMessage>.Factory.StartNew(() => new HttpResponseMessage(HttpStatusCode.Unauthorized))
: base.SendAsync(request, cancellationToken);
}
private bool IsClientAuthorized(HttpRequestMessage request)
{
return request != null && !string.IsNullOrEmpty(request.Headers.Authorization.ToString());
}
}
Он отлично работает при размещении в IIS, но для интеграционных тестов я использую HttpSelfHostServer, и здесь заголовок Authorization отсутствует в HttpRequestMessage, хотяЯ вижу, что это было отправлено на след Fiddler.
Я попытался создать действительно простое приложение WebAPI, использующее собственный хостинг, чтобы убедиться, что проблема постоянна, но, к сожалению, она работает там, как и ожидалось.Так что это должно быть как-то связано с моим кодом, но я совершенно не знаю, что его вызывает.
Кто-нибудь еще видел такое поведение, или у кого-нибудь есть предложения, как отследить, куда он попадает в стек WebAPI?неправильно?