【问题标题】:How to send XML content with HttpClient.PostAsync?如何使用 HttpClient.PostAsync 发送 XML 内容?
【发布时间】:2014-08-17 18:42:42
【问题描述】:

我正在努力实现this rest api

public async Task<bool> AddTimetracking(Issue issue, int spentTime)
{
    // POST /rest/issue/{issue}/timetracking/workitem
    var workItem = new WorkItem(spentTime, DateTime.Now);
    var httpContent = new StringContent(workItem.XDocument.ToString());
    var requestUri = string.Format("{0}{1}issue/{2}/timetracking/workitem", url, YoutrackRestUrl, issue.Id);
    var respone = await httpClient.PostAsync(requestUri, httpContent);
    if (!respone.IsSuccessStatusCode)
    {
        throw new InvalidUriException(string.Format("Invalid uri: {0}", requestUri));
    }

    return respone.IsSuccessStatusCode;
}

workItem.XDocument 包含以下元素:

<workItem>
  <date>1408566000</date>
  <duration>40</duration>
  <desciption>test</desciption>
</workItem>

我收到来自 API 的错误:Unsupported Media Type

我真的不知道如何解决这个问题,非常感谢帮助。我如何使用HttpClient 通过 HTTP POST URI 编组 XML 文件?

【问题讨论】:

  • 您将日期计算为秒,但链接中的示例使用毫秒。
  • @L.B,将其更改为毫秒,没有运气。我想我对 HttpContent 做错了。不幸的是,谷歌对我帮助不大
  • PS:当我使用完全相同的参数设置 Firefox 海报时,它可以工作。从 C# 中尝试的运气并没有那么好。
  • bas,下载fiddler,看看firefox和你的代码有什么区别..
  • @L.B,谢谢你的提示,我明天试试。

标签: c# post httpclient


【解决方案1】:

您可能希望在 StringContent 中设置 mediaType,如下所示:

var httpContent = new StringContent(workItem.XDocument.ToString(), Encoding.UTF8, "text/xml");

var httpContent = new StringContent(workItem.XDocument.ToString(), Encoding.UTF8, "application/xml");

【讨论】:

  • text/xml 在我的例子中
  • 我知道这个答案已经有好几年了,但在我的情况下媒体类型也需要是“text/xml”。
【解决方案2】:

你可以使用

var respone = await httpClient.PostAsXmlAsync(requestUri, workItem);

https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions_methods

【讨论】:

  • 看起来比接受的答案更好的解决方案
  • asp.net core 3.1没有这个方法
【解决方案3】:

要使用 Matt Frear 的解决方案,您可能需要添加 NuGet 包: Microsoft.AspNet.WebApi.Client

这引入了扩展方法,因此您可以使用:

var respone = await httpClient.PostAsXmlAsync<WorkItem>(requestUri, workItem);

这适用于较新的 .Net 5,因此假设适用于 asp.net core 3.1。

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 1970-01-01
    • 2016-08-09
    • 2017-07-08
    • 2011-08-26
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多