2015-05-30 5 views
0

Для проекта я должен использовать API, который использует GET-глагол и который обязательно требует свойства Content-type, но это не стандартно, и я хотел бы установить это свойство в "применение/JSON".C# HttpClient ProtocolViolationException

Я использую C# HttpClient и после просмотра во всей вселенной я не могу найти способ сделать это. У меня всегда есть «ProtocolViolationException», очевидно ...

Есть ли способ использовать запрос «Content-type» и «GET» с помощью HttpClient?

Я использую этот код

public async Task<HttpResponseMessage> GetAsync(string uri, double timeout = 0, string token = null) 
    { 
     using(var handler = new HttpClientHandler()) 
     { 
      if(handler.SupportsAutomaticDecompression) 
      { 
       handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
      } 

      using(var client = new HttpClient(handler)) 
      { 
       var request = new HttpRequestMessage(HttpMethod.Get, uri); 

       HttpResponseMessage httpResponseMessage = null; 

       if(timeout > 0) 
       { 
        client.Timeout = TimeSpan.FromSeconds(timeout); 
       } 

       if(!string.IsNullOrWhiteSpace(token)) 
       { 
        request.Headers.Add("authorization", token); 
       } 

       request.Content = new StringContent(""); 
       request.Content.Headers.Remove("Content-type"); 
       request.Content.Headers.Add("Content-type", "application/json"); 

       httpResponseMessage = await client.SendAsync(request); 

       return httpResponseMessage; 
      } 
     } 
    } 

Заранее спасибо :)

+0

Пожалуйста, продемонстрируйте, что вы пробовали. Вы можете легко указать заголовок Content-Type в 'HttpRequestMessage' ... –

+0

Мы будем более полезны, если вы поместите некоторый код для просмотра. – Hovo

ответ

0

Не устанавливайте Content-Type в запросе GET. Вместо этого, предполагая, что вы хотите получить результат JSON, установите заголовок Accept.

+1

Да, обычно «контент» предназначен только для POST и PUT, но для API, который я использую, требуются «GET» и «Content-type», иначе API не дает никаких результатов, есть ли способ сделать это? –

Смежные вопросы