かなり広範囲なRESTサービスをWCFからASP.NET WebAPIに移行しています。私たちはAuthorizationヘッダーを使用してクライアントからサーバーにトークンを送信しています。有効なAuthorizationヘッダーが見つからなくなったらすぐに401で応答するコードでDelegateHandlerを実装しました。コードの簡略化はここで見ることができます:HttpSelfHostServerを使用しているときにヘッダーが消えています
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上に存在しませんそれがフィドラーのトレースで送られたのを見てください。
セルフホスティングを使用して問題が一貫していることを確認するために、本当にシンプルなWebAPIアプリケーションを作成しようとしましたが、残念ながらそこに期待どおりに機能します。だから、どうにかして私のコードに関連しなければならないが、私はそれを引き起こしていることを完全に空白にしている。
他に誰もこの動作を見たことがありますか、誰かがWebAPIスタックのどこが間違っているかをトレースする方法についての提案はありますか?