我正在处理一个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中生成,它不会。
有没有办法覆盖这种行为?
由于
答案 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");
使用这种方法时不需要反射。