gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:15:02 25 4
gpt4 key购买 nike

我正在尝试向 REST Web 服务发送一个简单的 POST 请求并打印响应(代码在下面,主要取自 Yahoo! 开发人员文档和一些文档随附的 MSDN 代码片段)。我希望客户发送:

请求方法:POST(即我希望在 PHP 中 $_SERVER['REQUEST_METHOD'] == 'POST')
数据:foo=bar(即 PHP 中的 $_POST['foo'] == 'bar')

不过,好像是在发送:

请求方式: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#客户端时,服务器端的$_POST数组为空。

最佳答案

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

request = (HttpWebRequest) WebRequest.Create(uri);
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(user, password);
request.Method = WebRequestMethods.Http.Post;

根据文档,我推测这会在发送实际 POST 请求之前强制进行身份验证。我不确定为什么该类不自动执行此操作(其他语言的库使此过程透明,除非您明确将其关闭),但它已经解决了我的问题并且可能会为其他人节省 2 天的搜索时间和拉头发。

就其值(value)而言,PreAuthenticate 不需要为 GET 请求设置,只需为 POST 设置,尽管如果您为 GET 请求设置它,一切仍然有效,但需要的时间稍长一些。

关于C# REST 客户端使用 POST 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3856052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com