StringContent与params(表单数据)相同吗?

时间:2014-11-12 23:19:57

标签: 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();
}

但是,服务器会回复一条错误消息,指出电子邮件或通行证不在那里。

  

{\" status \":\"错误\",\"消息\":\"电子邮件或通行证丢失\"}

现在,我可以看到它撒谎,但可以做些什么呢?我不提供凭证作为发布数据(相当于"参数"如果从FF中的URL行调用,可以看到,如下图所示?

我还注意到,当我访问 RequestMessage 时,我得到的网址没有已发送的凭据。我错过了什么愚蠢的事情?!

result = message.RequestMessage.ToString();

这个结果给了我以下字符串。

  

方法:POST,RequestUri:' https://server.com/gettoken' ;,版本:1.1,内容:System.Net.Http.StringContent,标题:\ u000d \ u000a {\ u000d \ u000a内容类型:text / plain; charset = utf-8 \ u000d \ u000a内容长度:56 \ u000d \ u000a}

enter image description here

1 个答案:

答案 0 :(得分:4)

您应该使用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();
}
相关问题