【发布时间】:2020-10-27 22:31:31
【问题描述】:
我正在将一个 java 应用程序移植到 C#。有一个带有一些键值对的 HTTP 发布请求。无需身份验证。我还获得了一个工作 python 示例,它以类似的方式发布。端点很好。
我已经尝试过 HTTPClient 和 RestSharp,结果相似。
我想知道我是否做错了,我正在做这样的事情:
var values = new Dictionary<string, string>
{
{ "A", a },
{ "B", b },
{ "C", c },
{ "D", d }
}
var content = new FormUrlEncodedContent(values);
Uri u = new Uri(myURI);
var response = await client.PostAsync(u,content);
var responseString = await response.Content.ReadAsStringAsync();
python 看起来很像这样:
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("https://httpbin.org/post", data=payload)
>>> print(r.text)
java 和 python 的例子,看起来很相似,建立一个参数列表并发布。其余的锐利看起来相似,但也因相同的错误而失败。我正在寻找一些我不知道的东西来尝试。是标题还是内容类型发生了变化?提交数据的不同方式?我迷路了。
【问题讨论】:
-
在这个时代使用 RestSharp 没有真正的理由,使用 IHttpClientFactory。此外,如果您尝试调试 be 调用之间的差异,请使用 Fiddler
-
您确定端点接受
application/x-www-form-urlencoded内容吗?这就是 Java/python 示例发布数据的方式吗? -
@devNull 我不确定。我被认为要改变这一点,但不确定我做得是否正确。 Python 代码使用
requests库,代码中没有标题/内容更改;看似默认的发布请求。 -
@TheGeneral 我会试试提琴手。谢谢
-
Fiddler 很好地格式化了错误。这是一个无效的参数输入。已修复并且可以正常工作。顺便说一句,python 请求在 postasync 上以相同的方式发布。
标签: c# post .net-core httpclient restsharp