HttpClient / HttpRequestMessage 接受头参数不能有空格

Tho*_* F. 6 c# dotnet-httpclient .net-core

我正在处理一个 API,它要求我设置标头application/json;masked=false以揭露某些信息。使用设置标题时

var request = new HttpRequestMessage()
request.Headers.Add("Accept", "application/json;masked=false");
Run Code Online (Sandbox Code Playgroud)

看起来好像在;masked制作输出标题之间添加了一个空格application/json; masked=false。不幸的是,我正在使用的这个 API 似乎只检查application/json;masked=false没有空格的文字。我知道标题有效,因为如果我在邮递员中没有空格的情况下使用它,它可以正常工作。如果我使用在邮递员中生成的 C#,则不会。

有没有办法覆盖这种行为?

谢谢

Tho*_* F. 6

好的,所以通过一些挖掘,我们最终找到了这个问题的 github 问题:https : //github.com/dotnet/corefx/issues/18449,他们有一个使用反射的解决方法。

我将他们的解决方法用于我正在做的事情:

        request.Headers.Add("Accept", contentType);
        foreach (var v in request.Headers.Accept)
        {
            if (v.MediaType.Contains("application/json"))
            {
                var field = v.GetType().GetTypeInfo().BaseType.GetField("_mediaType", BindingFlags.NonPublic | BindingFlags.Instance);
                field.SetValue(v, "application/json;masked=false");
                v.Parameters.Clear();
            }
        }
Run Code Online (Sandbox Code Playgroud)