Vb.net 如何添加';内容类型';使用HttpClient的(HTTP GET)Rest请求标头集合中的标头?
我正在使用HttpClient进行rest服务。当我试图在我的'Get'请求头中添加“Content Type”时,我曾经遇到过一个问题 我知道“内容类型”适合于请求主体部分中的内容发送,但我需要将“内容类型”与请求头部分一起发送 我还尝试从HttpRequestHeaders的无效头列表中删除“Content-Type”头 我找到了链接 但我的问题没有解决我有例外 内部异常: 消息=必须使用适当的属性或方法修改“内容类型”标题。Vb.net 如何添加';内容类型';使用HttpClient的(HTTP GET)Rest请求标头集合中的标头?,vb.net,rest,dotnet-httpclient,webservices-client,Vb.net,Rest,Dotnet Httpclient,Webservices Client,我正在使用HttpClient进行rest服务。当我试图在我的'Get'请求头中添加“Content Type”时,我曾经遇到过一个问题 我知道“内容类型”适合于请求主体部分中的内容发送,但我需要将“内容类型”与请求头部分一起发送 我还尝试从HttpRequestHeaders的无效头列表中删除“Content-Type”头 我找到了链接 但我的问题没有解决我有例外 内部异常: 消息=必须使用适当的属性或方法修改“内容类型”标题。 StackTrace: at System
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:
我发现一些工具,如邮递员或SoupUI允许这样做
请帮我找到一些解决办法
谢谢HttpWebRequest可能会帮助您
private static string CallService(string url)
{
WebRequest req = WebRequest.Create(url);
req.Method = "GET";
String json;
req.ContentType = "application/json; charset=utf-8";
var resp = req.GetResponse();
using (varstream = resp.GetResponseStream())
{
var re = new StreamReader(stream);
json = re.ReadToEnd();
}
return json;
}
}
可以从HttpWebRequest中找到异步实现,HttpWebRequest可能会帮助您
private static string CallService(string url)
{
WebRequest req = WebRequest.Create(url);
req.Method = "GET";
String json;
req.ContentType = "application/json; charset=utf-8";
var resp = req.GetResponse();
using (varstream = resp.GetResponseStream())
{
var re = new StreamReader(stream);
json = re.ReadToEnd();
}
return json;
}
}
可以从中找到异步实现,那么您的要求是什么?您想在请求中添加内容类型标头,还是要将其删除?添加时您是否面临任何问题?遵循这篇文章,了解如何在使用httpClient调用GET API时向请求添加标题。这是一个有用的链接,但实际问题是我想在标题中添加内容类型,如
client.DefaultRequestHeaders.add(“内容类型”,“应用程序/json”)
它允许我添加Accept标头,但当我尝试添加内容类型时,它会引发以下异常:标头名称使用不当。确保请求头与HttpRequestMessage、HttpResponseMessage的响应头以及HttpContent对象的内容头一起使用。这似乎是HTTP规则,它不允许为GET请求设置“内容类型”。你能解释一下你的要求吗?你的要求是什么?您想在请求中添加内容类型标头,还是要将其删除?添加时您是否面临任何问题?遵循这篇文章,了解如何在使用httpClient调用GET API时向请求添加标题。这是一个有用的链接,但实际问题是我想在标题中添加内容类型,如client.DefaultRequestHeaders.add(“内容类型”,“应用程序/json”)
它允许我添加Accept标头,但当我尝试添加内容类型时,它会引发以下异常:标头名称使用不当。确保请求头与HttpRequestMessage、HttpResponseMessage的响应头以及HttpContent对象的内容头一起使用。这似乎是HTTP规则,它不允许为GET请求设置“内容类型”。你能解释一下你的需求是什么迫使你将这个头添加到请求中的吗?这很有用,但也有一些原因,比如HttpClient优于WebRequest。所以我选择httpclient来实现。我希望你能理解,所以请给我另一个解决方案。HttpClient本身不支持此功能,除非你想破解它。这里解释了一个这样的黑客,我尝试过,但使用反射是可行的,当我在.Net 4上使用System.Net.Http(2.0.0.0),但在.Net 4的更新支持版本System.Net.Http(2.2.29.0)上不工作时,我的问题的所有答案都是Hanks Chetan,如果您有更多的信息,请与我分享在未来。这是有用的,但一些原因,如HttpClient比WebRequest的好处。所以我选择httpclient来实现。我希望你能理解,所以请给我另一个解决方案。HttpClient本身不支持此功能,除非你想破解它。这里解释了一个这样的黑客,我尝试过,但使用反射是可行的,当我在.Net 4上使用System.Net.Http(2.0.0.0)时,但在.Net 4的更新支持版本System.Net.Http(2.2.29.0)上不起作用。对于我的所有查询,如果您有更多相同的信息,请在将来与我分享。