Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过HttpClient将空正文发布到REST API_C#_Wcf_Httpclient_Wcf Web Api - Fatal编程技术网

C# 通过HttpClient将空正文发布到REST API

C# 通过HttpClient将空正文发布到REST API,c#,wcf,httpclient,wcf-web-api,C#,Wcf,Httpclient,Wcf Web Api,我试图调用的API要求我执行POST,但正文为空。我对使用WCF Web API HttpClient还不熟悉,我似乎找不到编写代码来完成一篇正文为空的文章。我找到了一些HttpContent.CreateEmpty()方法的引用,但我认为这不适用于Web API HttpClient代码,因为我似乎找不到该方法。我认为,如果您的Web方法没有参数或它们都适合URL模板,则会自动执行该操作 Task<HttpResponseMessage> task = client.PostAsy

我试图调用的API要求我执行POST,但正文为空。我对使用WCF Web API HttpClient还不熟悉,我似乎找不到编写代码来完成一篇正文为空的文章。我找到了一些HttpContent.CreateEmpty()方法的引用,但我认为这不适用于Web API HttpClient代码,因为我似乎找不到该方法。

我认为,如果您的Web方法没有参数或它们都适合URL模板,则会自动执行该操作

Task<HttpResponseMessage> task = client.PostAsync(url, null);
例如,此声明发送空正文:

  [OperationContract]
  [WebGet(UriTemplate = "mykewlservice/{emailAddress}",
     RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
     BodyStyle = WebMessageBodyStyle.Wrapped)]
  void GetStatus(string emailAddress, out long statusMask);
Task<HttpResponseMessage> task = client.PostAsync(url, null);

使用源自
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);
Task Task=client.PostAsync(url,null);
发现:

Task<HttpResponseMessage> task = client.PostAsync(url, null);
Task<HttpResponseMessage> task = client.PostAsync(url, null);
Task Task=client.PostAsync(url,null);
将null添加到请求正文,请求正文在WSO2上失败。替换为:

Task<HttpResponseMessage> task = client.PostAsync(url, null);
Task<HttpResponseMessage> task = client.PostAsync(url, new {});
Task Task=client.PostAsync(url,新{});

并且有效。

要解决此问题,请使用以下示例:

Task<HttpResponseMessage> task = client.PostAsync(url, null);
   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;
            }
使用(var-client=new-HttpClient())
{
var stringContent=新的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().result;
}

我正试图发送一个空的尸体。HttpClient.Post()方法需要URI和HttpContent对象。当我不想发送任何东西时,我不想传递什么作为HttpContent。所以你没有使用WCF。这更容易:。。。HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(“http://..."); request.Method=“POST”;HttpWebResponse响应=(HttpWebResponse)请求。GetResponse()。。。您使用的是HttpClient,而不是HttpWebRequest。将StringContent与空字符串一起使用worked.HttpContent.CreateEmpty来自旧的HttpClient原型,它是REST初学者工具包的一部分。不幸的是,在新的HttpClient中没有类似的版本。@MichaelFreidgeim的可能重复如果时空连续体中有一个洞,并且2013年在2011年之前,那么是的,这是一个可能的重复。“可能的重复”是一种清理方法——关闭类似的问题并保留一个最佳答案。日期不是必需的。看看你是否同意它需要澄清,请投票决定它看起来只是在.NETFramework4.5中?它将与WCF Web API一起提供,但我认为一些“好的部分”将使其成为框架本身。为什么没有任何不需要
HttpContent
类的重载方法?我们应该至少提供一些东西(甚至是一个空字符串)来制作http post吗?您可以使用
null
作为
HttpContent
,这将不会在请求中发送正文,例如
var response=wait client.PostAsync(requestUri,null)Assembly
System.Net.Http
仍然没有可为空的
HttpContent
参数,因此不允许为
null
。但它(仍然)似乎有效。我可以通过
null。这比公认的答案更清晰,应该被投票通过。我无法确认这一发现(但我不确定我的测试是否完全足够)。当我使用
null
内容发布到我自己的一个API并查看
HttpRequestMessage
中的内容时,我似乎得到了零字节的长度。