Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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#REST客户端使用POST发送数据_C#_Http_Rest - Fatal编程技术网

C#REST客户端使用POST发送数据

C#REST客户端使用POST发送数据,c#,http,rest,C#,Http,Rest,我正试图向RESTWeb服务发送一个简单的POST请求并打印响应(代码如下,主要取自Yahoo!developer文档和一些文档提供的MSDN代码片段)。我希望客户发送: 请求方法:POST(即,我希望$\u服务器['Request\u Method']==PHP中的'POST') 数据:foo=bar(即$\u POST['foo']=='bar'在PHP中) 然而,它似乎在发送: 请求方法:FOO=BARPOST 数据:(空白) 我知道API是可以工作的,因为我已经用Python和PHP编写

我正试图向RESTWeb服务发送一个简单的POST请求并打印响应(代码如下,主要取自Yahoo!developer文档和一些文档提供的MSDN代码片段)。我希望客户发送:

请求方法:POST(即,我希望$\u服务器['Request\u Method']==PHP中的'POST')
数据:foo=bar(即$\u POST['foo']=='bar'在PHP中)

然而,它似乎在发送:

请求方法:FOO=BARPOST
数据:(空白)

我知道API是可以工作的,因为我已经用Python和PHP编写的客户端对它进行了测试,所以我很确定这一定是我的C#的问题。我不是一名.NET程序员,因此如果能就如何找出问题所在提出任何意见/建议,我将不胜感激——我确信这是一件小事,但我自己无法发现

uri、用户和密码变量在代码的前面就设置好了——它们可以很好地处理GET请求

request = (HttpWebRequest) WebRequest.Create(uri);
request.Credentials = new NetworkCredential(user, password);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";

string postData = "foo=bar";
request.ContentLength = postData.Length;

StreamWriter postStream = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
postStream.Write(postData);
postStream.Close();

response = (HttpWebResponse) request.GetResponse();

REST API是用PHP编写的,当使用C#客户端时,服务器上的$#u POST数组是空的。

最终找到了HttpWebRequest.PreAuthenticate属性,如果代码是这样编辑的,它似乎可以解决问题:

request = (HttpWebRequest) WebRequest.Create(uri);
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(user, password);
request.Method = WebRequestMethods.Http.Post;
从文档中,我假定这会在发送实际POST请求之前强制进行身份验证。我不确定该类为什么不会自动执行此操作(其他语言的库使此过程透明,除非您显式关闭它),但它为我解决了问题,并可能为其他人节省2天的搜索和头发拉扯时间

值得一提的是,不需要为GET请求设置PreAuthenticate,只需设置POST,尽管如果为GET请求设置PreAuthenticate,一切都会正常工作,但需要的时间稍长一些