HttpClient / HttpRequestMessage accept header 参数不能有空格

HttpClient / HttpRequestMessage accept header parameters cannot have spaces

我正在处理一个 API,它需要我设置 header application/json;masked=false 才能显示一些信息。使用

设置 header 时
var request = new HttpRequestMessage()
request.Headers.Add("Accept", "application/json;masked=false");

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

有什么方法可以覆盖此行为吗?

谢谢

好吧,通过一些挖掘,我们最终找到了这个 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();
            }
        }

这个问题在 .NET 5 中仍然存在,但我通过使用解决了它:

request.Headers.TryAddWithoutValidation("Accept", "application/json;masked=false");

使用此方法时不需要反射。