【发布时间】:2014-11-12 23:19:57
【问题描述】:
我正在使用以下代码向服务器发布消息。
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\":\"error\",\"message\":\"电子邮件或密码丢失\"}
现在,我可以看出它在撒谎,但能做些什么呢?我是否没有提供凭据作为发布数据(如果从 FF 中的 URL 行调用,可以看到等效的“参数”,如下图所示?
我还注意到,当我像下面那样访问 RequestMessage 时,我得到了 URL但 没有发送任何凭据。我错过了什么愚蠢的事情?!
result = message.RequestMessage.ToString();
这个结果给了我以下字符串。
方法:POST,RequestUri:'https://server.com/gettoken',版本:1.1,内容:System.Net.Http.StringContent,标头:\u000d\u000a{\u000d\u000a 内容类型:文本/纯文本; charset=utf-8\u000d\u000a 内容长度:56\u000d\u000a}
【问题讨论】:
-
POST 请求的默认格式(例如来自实际的 HTML 表单)是
application/x-www-form-urlencoded,其中键与值用等号 (=) 分隔。 -
@voithos 好眼睛,伙计!我更正了文字。这是等号 - 我只是在编辑我的真实凭据时写错了。另外,我添加了一个关于 RequestMessage 的新行。现在有什么想法吗?
-
您应该尝试使用
FormUrlEncodedContent而不是StringContent。看到这个答案:stackoverflow.com/a/20005964/716118 -
@voithos (a) 将此作为回复发布,因为它非常有效!惊人的! (b) 我仍然看不到 RequestMessage 中的参数......虽然我得到了正确的令牌和东西,但仍然......
-
这可能是由于
HttpRequestMessage的ToString()实现。尝试检查message.Content.ToString()
标签: c# post dotnet-httpclient