2017-01-25 23 views
1

我正在使用HttpClient作为休息服务。在在一个点上我有一个问题,当我尝试添加“的Content-Type”“获取”请求头。如何在(HTTP GET)中使用HttpClient添加'Content-Type'头部Rest请求头部集合?

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

我找到一些像邮差或SoupUI工具允许这一点。

请帮我找到一些解决方案。

谢谢

+0

那么,什么是你需要找到?你想在你的请求中添加Content-Type标题,或者你想删除它?添加它时是否遇到任何问题? –

+0

http://stackoverflow.com/questions/29801195/adding-headers-when-using-httpclient-getasync按照这篇文章了解如何使用httpClient调用GET API时向请求添加标头。 –

+0

它有用的链接,但实际的问题是,我想在像'client.DefaultRequestHeaders.Add(“内容类型”,“apllication/JSON”)头添加内容型' – Shubham

回答

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

+0

这很有用,但有一些原因像HttpClient通过WebRequest获益。所以我选择httpclient来实现。我希望你能理解,所以请给我另一个解决方案。 – Shubham

+0

除非你想破解它,否则HttpClient本身不支持这个特性。一个这样的黑客解释这里http://stackoverflow.com/questions/10679214/how-do-you-set-the-content-type-header-for-an-httpclient-request/16959464 –

+0

我试过但使用反射是当我在.Net 4上使用System.Net.Http(2.0.0.0)时工作,但无法在更新的支持版本System.Net.Http(2.2.29.0)上运行.Net 4 – Shubham