【问题标题】:Skip header validation in BeforeSendRequest在 BeforeSendRequest 中跳过标头验证
【发布时间】:2019-03-24 08:13:04
【问题描述】:

根据this话题我正在使用这段代码

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request,  System.ServiceModel.IClientChannel channel)
{
    HttpRequestMessageProperty httpRequestMessage;
    object httpRequestMessageObject;
    if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
    {
        httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
        if (string.IsNullOrEmpty(httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER]))
        {
            httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER] = this.m_userAgent;
        }
    }
    else
    {
        httpRequestMessage = new HttpRequestMessageProperty();
        requestMessageProperty.Headers.Add("Authorization",  token);
        request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
    }

但不幸的是,由于我将代码从 .net 框架 4.7 移动到 .net core 2.1 项目,我收到了以下错误代码:

无法复制带有值的 HTTP 标头“授权” 'qqqqqqqqq='到 'System.Net.Http.Headers.HttpRequestHeaders'。\r\n值的格式 'qqqqqqqqq='无效。

在旧项目中一切正常 是否可以跳过授权标头验证? 谢谢

【问题讨论】:

    标签: c# web-services wcf .net-core http-headers


    【解决方案1】:

    .net 核心验证授权标头格式。 根据https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization 授权标头应采用以下格式:
    Authorization: <type> <credentials>

    如果您的授权标头在 typecredentials 之间不包含空格或包含多个空格,您将收到此错误

    这会正常工作:

    requestMessageProperty.Headers.Add("Authorization", $"my-custom-auth-type {token}");
    

    【讨论】:

    • 我知道,但我无法控制的目标服务器不接受凭据之前的身份验证类型。
    猜你喜欢
    • 2020-08-02
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多