使用 .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 });
我正在尝试与 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 });