头使用HttpSelfHostServer时消失(Headers disappearing when

2019-10-29 16:46发布

我在迁移从WCF一个相当广泛的REST服务ASP.NET的WebAPI的过程。 我们使用授权头从客户端发送令牌服务器,我实现了与同401,尽快响应代码DelegateHandler因为它认为没有有效的授权标头。 代码的简化可以在这里看到:

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,即使我能看到它的提琴手跟踪发送。

我试图让使用自托管来验证问题是一致的一个非常简单的WebAPI的应用程序,但不幸的是它工作正常那里。 因此,它必须以某种方式与我的代码,但我完全空白是什么原因造成的。

有没有其他人看到这种行为,还是没有任何人有如何追查中的WebAPI栈它出错的建议?

Answer 1:

原来的问题要由授权报头的格式引起被发送。 我们希望授权头是这个样子:

Authorization: 42w4hGtmB7blLOXjcsx8AIbBEhxNpQpj3VNnf89vvjAkJEoX9S+JtmkYZcth+B9y/8Cc3tm1XDOFxGTqN1Hi2Q==

这工作得很好WCF下,但根据HTTP标准,这需要一个方案和值未格式化。 例如:

Authorization: XAPI 42w4hGtmB7blLOXjcsx8AIbBEhxNpQpj3VNnf89vvjAkJEoX9S+JtmkYZcth+B9y/8Cc3tm1XDOFxGTqN1Hi2Q==

我的猜测是,仅在标题中值,网页API会认为这是该计划,只有某些字符被允许在这里。 当我将XAPI的方案,并使用相同的值,一切运行良好,并授权头是提供给我的HttpRequestMessage.Headers.Authorization代码。

但是我认为这是Web API的错误,该请求被允许继续进行和头不理,如果它有一个无效的格式。 我希望,如果头是按照规范无效它与一个400错误请求。



文章来源: Headers disappearing when using HttpSelfHostServer