如何使用HttpClient在(HTTP GET)Rest请求标头集合中添加“Content-Type”标头?

时间:2017-01-25 06:17:23

标签: vb.net rest dotnet-httpclient webservices-client

我正在使用 HttpClient 进行休息服务。当我尝试在'获取'请求标头中添加“内容类型”时,我遇到了一个问题。

我知道“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

但是我的问题没有解决我有异常

的InnerException:

消息=必须使用相应的 属性或方法修改“内容类型”标头。

   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这样的工具允许这样做。

请帮我找一些解决方案。

谢谢

1 个答案:

答案 0 :(得分:0)

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; 
    }
}

可以从Getting the Response of a Asynchronous HttpWebRequest

找到异步实现
相关问题