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

时间:2017-07-19 15:09:09

标签: c# .net-core dotnet-httpclient

我正在处理一个API,要求我设置标头application/json;masked=false以取消屏蔽某些信息。使用

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

好像在;masked之间添加了一个空格,使得输出标题为application/json; masked=false。不幸的是,我正在使用的这个API似乎仅针对没有空格的文字application/json;masked=false进行检查。我知道标题有效,因为如果我使用它而没有邮递员的空间它可以正常工作。如果我使用一个C#在postman中生成,它不会。

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

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

这个问题在 .NET 5 中仍然存在,但我使用以下方法解决了:

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

使用这种方法时不需要反射。