【问题标题】:How to pass variable into POST request using HttpClient如何使用 HttpClient 将变量传递给 POST 请求
【发布时间】:2014-08-16 10:49:41
【问题描述】:

我正在寻找新的HttpClient

我尝试像这样发布一个 http uri:

http://server/API/user/login?login=name&password=password

我认为这是要走的路:

using (var client = new HttpClient())
{
    var values = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("login", "user"),
        new KeyValuePair<string, string>("password ", "password")
    };

    var content = new FormUrlEncodedContent(values);

    var response = await client.PostAsync("http://server/REST/user/login", content);
}

我可以让它工作的唯一方法是:

using (var client = new HttpClient())
{
    var response = await client.PostAsync("http://server/REST/user/login?login=user&password=password",null);
}

最后一种方法是正确的方法还是我在第一种方法中做错了什么?

【问题讨论】:

  • 前者似乎是正确的:您必须将这些值作为正文的一部分传递,而不是像在第二个选项中那样传递 URL。你能确切地澄清什么不起作用吗?你确定这就是它应该如何工作的吗?没有人将登录名和密码作为 URL 的一部分发送。
  • 不同的东西。一种形式需要 URL 上的参数。另一个期望帖子内容中的数据。
  • 尝试实施此解决方案:stackoverflow.com/questions/15176538/…。也许它可以解决你的问题
  • 如果没有正文,你确定这应该是 POST 吗?

标签: c# post httpclient


【解决方案1】:

示例显示它在Cookie 标头中传递,而不是在正文中传递。如果我正确解释 API,您确实必须在 URL 中传递用户名和密码,并为 Cookie 标头提供 url 编码的数据。

本质上:使用第二种方法,对于所有后续调用,添加以下内容:

client.DefaultRequestHeaders.Add("Cookie", await content.ReadAsStringAsync());

【讨论】:

  • 将用户名和密码作为 cookie 传递?!!恐怖!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2015-08-24
  • 1970-01-01
  • 2021-12-27
  • 2022-01-19
  • 2020-04-02
  • 1970-01-01
相关资源
最近更新 更多