2017-01-25 265 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