2013-05-02 569 views
8
HttpClient serviceClient = new HttpClient(); 
serviceClient.DefaultRequestHeaders.Add("accept", "Application/JSON"); 

HttpContent content = new StringContent(text); 
content.Headers.Add("content-type", "text/html"); 

var response = await serviceClient.PostAsync(new Uri(_serviceUrl), content); 

这是我的代码。我想做一个POST,并将内容类型设置为text/html,但是当我这样做时,我得到了上述错误。C#HttpClient,出错无法添加值,因为头'内容类型'不支持多个值

我可以通过content.Headers.ContentType设置内容类型,但我不知道如何指定“text/html”,如果我这样做。谁能帮忙?

回答

7

还没有把.NET 4.5准备好了,但根据HttpContentHeaders.ContentTypeMediaTypeHeaderValue,它应该是这个样子:

content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); 
+4

'content.Headers.ContentType =新MediaTypeHeaderValue(“text/html的“)'被接受了,也许就是这样。它的参数是'string mediaType'。 – NibblyPig 2013-05-02 11:56:16

+0

@SLC所以它应该是'content.Headers.ContentType = new MediaTypeHeaderValue(“text/html”)'? – CodeCaster 2013-05-02 13:11:02

+0

我相信是这样,它没有错误,但是谁知道它是否发送了正确的标题。通常,内容类型也包含字符编码,但是追加会产生一个错误,所以我暂时忽略它... – NibblyPig 2013-05-02 13:12:13

0
var settings = new JsonSerializerSettings() 
     { 
      DateFormatHandling = 
       DateFormatHandling.MicrosoftDateFormat 
     }; 
     var serializedString = JsonConvert.SerializeObject(data, settings); 

     var conent = new StringContent(serializedString); 
     conent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
     var response = await this.httpClient.PostAsync(requestUri, conent).ConfigureAwait(false); 

     T requestResult = default(T); 
     if (response.IsSuccessStatusCode) 
     { 
      response.EnsureSuccessStatusCode(); 
      requestResult = await response.Content.ReadAsAsync<T>(); 
     } 
+1

请为您的回答添加一些解释,说明代码的作用以及它如何解决问题。这将在未来帮助其他人 – 2014-09-29 14:45:08

相关问题