【发布时间】:2017-01-25 06:17:22
【问题描述】:
我正在使用 HttpClient 进行休息服务。有一次,当我尝试在 'Get' 请求标头中添加 "Content-Type" 时遇到问题。
我知道“Content-Type”适合在请求正文部分发送内容,但我需要发送带有请求头部分的“Content-Type”。
我还尝试从 HttpRequestHeaders 的无效标头列表中删除“Content-Type”标头
我找到链接How do you set the Content-Type header for an HttpClient request?
Dim field = GetType(System.Net.Http.Headers.HttpRequestHeaders).GetField("invalidHeaders", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.[Static])
If field IsNot Nothing Then
Dim invalidFields = DirectCast(field.GetValue(Nothing), HashSet(Of String))
invalidFields.Remove("Content-Type")
End If
但我的问题没有解决我有异常
内部异常:
Message=必须使用适当的 属性或方法修改“content-type”标头。
StackTrace:
at System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName)
at System.Net.WebHeaderCollection.Add(String name, String value)
at System.Net.Http.HttpClientHandler.SetRequestHeaders(HttpWebRequest webRequest, HttpRequestMessage request)
at System.Net.Http.HttpClientHandler.CreateAndPrepareWebRequest(HttpRequestMessage request)
at System.Net.Http.HttpClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
InnerException:
我发现 Postman 或 SoupUI 等一些工具允许这样做。
请帮我找到解决办法。
谢谢
【问题讨论】:
-
那么您的要求是什么?您想在请求中添加 Content-Type 标头还是要删除它?您在添加时遇到任何问题吗?
-
stackoverflow.com/questions/29801195/… 关注这篇文章,了解使用httpClient调用GET API时如何在请求中添加header。
-
它的有用链接,但实际问题是我想在标题中添加内容类型,如
client.DefaultRequestHeaders.Add("Content-Type","apllication/json") -
它允许我添加 Accept 标头,但是当我尝试添加 Content-Type 时会引发以下异常:Misused header name。确保请求标头与 HttpRequestMessage 一起使用,响应标头与 HttpResponseMessage 一起使用,内容标头与 HttpContent 对象一起使用。
-
似乎 HTTP 规则不允许为 GET 请求设置“Content-Type”。 stackoverflow.com/questions/26109650/…你能解释一下你的要求是什么迫使你将此标头添加到请求中吗?
标签: vb.net rest dotnet-httpclient webservices-client