【发布时间】:2012-03-19 15:19:15
【问题描述】:
我正在将一个相当广泛的 REST 服务从 WCF 迁移到 ASP.NET WebAPI。我们正在使用 Authorization 标头将令牌从客户端发送到服务器,并且我使用代码实现了 DelegateHandler,一旦发现没有有效的 Authorization 标头,就会以 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,并且此处的授权标头不存在于 HttpRequestMessage 上,即使我可以看到它是在 Fiddler 跟踪上发送的。
我尝试使用自托管创建一个非常简单的 WebAPI 应用程序来验证问题是否一致,但不幸的是它在那里按预期工作。所以它一定与我的代码有关,但我完全不知道是什么原因造成的。
有没有其他人看到过这种行为,或者有没有人有关于如何追踪 WebAPI 堆栈中哪里出错的建议?
【问题讨论】:
标签: wcf-web-api asp.net-web-api