使用 .NET HttpWebRequest,如何添加带有单个数字的范围 header?

Using .NET HttpWebRequest, how do I add a Range header with a single number?

我正在尝试与 REST interface 交互,其中有一个命名范围 header,它采用单个值,而不是起始值和终止值。即,它需要: Range: dli-depth=1 不是 Range: dli-depth=0-1

我可以使用 HttpWebRequest.AddRange() 将范围 header 添加到我的 HttpWebRequest,但无论我选择哪种变体,我总是以等号右侧的值结尾符号。相关设备不接受值中带有破折号的范围 header。如果我尝试将 Range 添加为自定义 header:

myRequest.Headers.Add("Range", $"dli-depth={depth}");

...我得到这个异常:

System.ArgumentException: 'The 'Range' header must be modified using the appropriate property or method.

如何在 .NET 中添加这个(可能 non-standard)范围 HTTP header?

由于您有 non-standard header,.net 不允许您添加此 header。 您可以使用以下 hack:

MethodInfo method = typeof(WebHeaderCollection).GetMethod
                        ("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(<your url>);
string key = "Range";
string val = $"dli-depth={depth}";
method.Invoke (request.Headers, new object[] { key, val });