如何使用 HttpClient.PostAsync 发送 XML 内容?
Posted
技术标签:
【中文标题】如何使用 HttpClient.PostAsync 发送 XML 内容?【英文标题】:How to send XML content with HttpClient.PostAsync? 【发布时间】: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("01issue/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,谢谢你的提示,我明天试试。 【参考方案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。
【讨论】:
以上是关于如何使用 HttpClient.PostAsync 发送 XML 内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用 HttpClient PostAsync 参数?
HttpClient.PostAsync 崩溃应用。如何捕捉异常?
网络条件差时如何处理文件HttpClient.PostAsync文件上传?
如何将对象传递给 HttpClient.PostAsync 并序列化为 JSON 主体?