我试图调用的 API 需要一个带有空正文的 POST。我是使用 WCF Web API HttpClient 的新手,我似乎找不到正确的代码来发布一个空的正文。我找到了对一些 HttpContent.CreateEmpty() 方法的引用,但我不认为它适用于 Web API HttpClient 代码,因为我似乎找不到该方法。
使用派生自 HttpContent
的 StringContent
或 ObjectContent
,或者您可以将 null
用作 HttpContent
:
var response = await client.PostAsync(requestUri, null);
以前做过,只是保持简单:
Task<HttpResponseMessage> task = client.PostAsync(url, null);
已经发现:
Task<HttpResponseMessage> task = client.PostAsync(url, null);
将 null 添加到请求正文,这在 WSO2 上失败。替换为:
Task<HttpResponseMessage> task = client.PostAsync(url, new {});
并且工作了。
null
内容发布到我自己的一个 API 并查看在 HttpRequestMessage
中找到的内容时,我似乎得到了零字节的长度。
要解决此问题,请使用以下示例:
using (var client = new HttpClient())
{
var stringContent = new StringContent(string.Empty);
stringContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = client.PostAsync(url, stringContent).Result;
var result = response.Content.ReadAsAsync<model>().Result;
}
如果您的网络方法没有参数或者它们都适合 URL 模板,我认为它会自动执行此操作。
例如,此声明发送空正文:
[OperationContract]
[WebGet(UriTemplate = "mykewlservice/{emailAddress}",
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
void GetStatus(string emailAddress, out long statusMask);
不定期副业成功案例分享
HttpContent
类的重载方法?我们至少应该提供一些东西(甚至是一个空字符串)来发布一个 http 帖子吗?null
作为HttpContent
,这将不会在请求中发送任何正文,例如var response = await client.PostAsync(requestUri, null);
System.Net.Http
仍然没有可为空的HttpContent
参数,因此不应允许null
。但它(仍然)似乎有效。我可以通过null!
。