2017-01-25 6 views
1

Я использую HttpClient для отдыха. В какой-то момент у меня проблема, когда я пытаюсь добавить «Content-Type» в мой «Get» заголовок запроса.Как добавить заголовок Content-Type в (HTTP GET) Сбор заголовка запроса на запрос с использованием HttpClient?

Я знаю, что «Content-Type» подходит для контента, отправляющего запрос. Часть тела. Но это моя потребность. Мне нужно отправить «Content-Type» с частью заголовка запроса.

Я также пытаюсь удалить "Content-Type" заголовок из списка Недопустимого заголовка из HttpRequestHeaders

я найти ссылку 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:

Сообщение = Заголовок '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: 

Я нахожу некоторые инструменты, такие как Почтальон или SoupUI позволяют это.

Пожалуйста, помогите мне найти решение.

Благодаря

+0

Так что же ваше требование? вы хотите добавить заголовок Content-Type в свой запрос или хотите его удалить? Вы сталкиваетесь с какими-либо проблемами при добавлении его? –

+0

http://stackoverflow.com/questions/29801195/adding-headers-when-using-httpclient-getasync Следуйте этому сообщению, чтобы понять, как добавить заголовок для запроса при использовании HTTPClient для вызова GET API. –

+0

Его полезная ссылка, но актуальная проблема заключается в том, что я хочу добавить тип содержимого в заголовок, например 'client.DefaultRequestHeaders.Add (« Content-Type »,« 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

Я пробовал Но используя отражение работать, когда я использовал System.Net.Http (2.0.0.0) на .Net 4, но не работал над обновленной поддерживаемой версией System.Net.Http (2.2.29.0) для .Net 4 – Shubham