在BeforeSendRequest中跳过标头验证

问题描述 投票:0回答:2

根据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 framwork 4.7 移动到 .net core 2.1 项目后,我收到以下错误代码:

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

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

c# web-services wcf .net-core http-headers
2个回答
0
投票

.net core 验证授权标头格式。 根据https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization 授权标头的格式应为:

Authorization: <type> <credentials>


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

这会很好地工作:

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

0
投票

您可以使用

TryAddWithoutValidation
代替普通的
Add

using var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation()        

using var client = new HttpClient();
var updateRequest = new HttpRequestMessage(new HttpMethod("PUT"), apiUrl)
updateRequest.Headers.TryAddWithoutValidation("If-Match", "something); 

https://learn.microsoft.com/en-us/dotnet/api/system.net.http.headers.httpheaders.tryaddwithoutvalidation?view=net-8.0

© www.soinside.com 2019 - 2024. All rights reserved.