在 WinRT HttpClient 上设置请求 Content-Type

Posted

技术标签:

【中文标题】在 WinRT HttpClient 上设置请求 Content-Type【英文标题】:Set request Content-Type on WinRT HttpClient 【发布时间】:2014-11-04 17:51:09 【问题描述】:

我正在使用 C# 和 .NET Framework 4.5.1 开发 Windows 8.1 Store 应用程序。

我正在尝试对 REST API 进行 POST,但我得到了带有此代码的不受支持的媒体类型:

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"

【问题讨论】:

【参考方案1】:

因为我在网上没有找到类似的代码,而且我对这个问题只有4个观点;我会分享答案。

我已经解决了使用此代码更改帖子的问题:

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

您可以在HttpStringContent 构造函数上传递“Content-Type”。更多信息here。

【讨论】:

非常感谢您分享这个!这帮助了我!我在一个环境中有这个,而在另一个环境中没有。谢谢!

以上是关于在 WinRT HttpClient 上设置请求 Content-Type的主要内容,如果未能解决你的问题,请参考以下文章

HTTPClient 返回 HttpRequestException WinRT

无法在 JavaScript 中为 Windows.Web.Http.HttpClient 添加超时

取消 'HttpClient' POST 请求

HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

HttpClient服务端发送http请求

如何在 HttpClient 的请求中添加、设置和获取 Header?