Kon*_*ten 0 c# post dotnet-httpclient
我正在使用以下代码向服务器发布消息。
String credentials="email=me@here.com&pass=abc123";
using (HttpClient client = new HttpClient())
{
HttpResponseMessage message = await client.PostAsync(
url, new StringContent(credentials));
result = await message.Content.ReadAsStringAsync();
}
Run Code Online (Sandbox Code Playgroud)
但是,服务器会回复一条错误消息,指出电子邮件或通行证不存在。
{\"状态\":\"错误\",\"消息\":\"缺少电子邮件或密码\"}
现在,我可以看到它在撒谎,但是可以做些什么呢?我是否没有提供凭据作为发布数据(相当于从 FF 中的 URL 行调用时可以看到的“参数”,如下图所示?
我还注意到,当我访问如下所示的RequestMessage 时,我得到了 URL,但没有发送任何凭据。我错过了什么愚蠢的事情?!
result = message.RequestMessage.ToString();
Run Code Online (Sandbox Code Playgroud)
这个结果给了我以下字符串。
方法:POST,RequestUri:'https://server.com/gettoken',版本:1.1,内容:System.Net.Http.StringContent,标题:\u000d\u000a{\u000d\u000a 内容类型:text/plain ; 字符集=utf-8\u000d\u000a 内容长度:56\u000d\u000a}

您应该使用FormUrlEncodedContent来传递您的 POST 数据,而不是一个StringContent对象。
var credentials = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("email", "me@here.com"),
new KeyValuePair<string, string>("pass", "abc123")
});
using (HttpClient client = new HttpClient())
{
HttpResponseMessage message = await client.PostAsync(
url, credentials);
result = await message.Content.ReadAsStringAsync();
}
Run Code Online (Sandbox Code Playgroud)