2014-11-04 90 views
1

我正在开发一个Windows 8.1商店应用程序与C#和.NET Framework 4.5.1。在WinRT上设置请求内容类型HttpClient

我试图做一个POST到一个REST API,但我得到这个代码不支持的媒体类型:

public async Task<HttpResponseMessage> POST(string url, string jsonContent) 
{ 
    Uri resourceUri; 

    resourceUri = ValidateUri(url); 

    HttpClient httpClient = new HttpClient(); 
    HttpResponseMessage response = new HttpResponseMessage(); 

    HttpRequestHeaderCollection headers = httpClient.DefaultRequestHeaders; 

    // Try to add user agent to headers. 
    if (headers.UserAgent.TryParseAdd(_userAgent)) 
     headers.UserAgent.ParseAdd(_userAgent); 

    // Add Content-Type and Content-Length headers 
    headers.Accept.Add(new HttpMediaTypeWithQualityHeaderValue("application/json")); 

    response = await httpClient.PostAsync(resourceUri, new HttpStringContent(jsonContent)); 

    return response; 
} 

如果我改变这一行:

response = await httpClient.PostAsync(resourceUri, new HttpStringContent(jsonContent)); 

有了这一个:

response = await httpClient.PostAsync(resourceUri, new HttpStringContent(string.Empty)); 

它的工作原理。我没有得到415状态码。

jsonContent值:

{"UserName":"My Name","Provider":"Facebook","ExternalAccessToken":"Access token omitted"}

回答

4

因为我还没有发现在互联网上的任何类似的代码,我只有在这个问题上4次;我会分享答案。

我有固定的这个问题改变后,此代码:

response = await httpClient.PostAsync(resourceUri, 
    new HttpStringContent(jsonContent, UnicodeEncoding.Utf8, "application/json")); 

您可以通过“内容类型”上HttpStringContent构造。更多信息here