如何使用 HttpClient 发出简单的 post 请求

How to make a simple post request with HttpClient

假设我有以下方法

    [HttpPost()]
    [Route("Api/IsUserValid/{username}/{password}")]
    public string ValidateUser(string username, string password)
    {
        var user = _context.USERS.FirstOrDefault(x => x.U_NAME.Equals(username) && x.U_PASSWORD.Equals(password));

        var jsonIzedUser = JsonConvert.SerializeObject(user);

        return jsonIzedUser;
    }

我想从 xamarin 项目发出 post 请求,下面是我发出 post 请求

的代码
using (var httpClient = new HttpClient())
{
    var content = new FormUrlEncodedContent(new[]
           {
        new KeyValuePair<string, string>("username","ASIM"),
        new KeyValuePair<string, string>("password","xxxx")
    });
    var response = await httpClient.PostAsync("http://10.0.2.2:44342/Api/IsUserValid", content); 
     string result = await response.Content.ReadAsStringAsync();

}

最后我得到了错误

StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Date: Sun, 15 Mar 2020 17:02:46 GMT
  Server: Microsoft-IIS/10.0
  Transfer-Encoding: chunked
  X-Android-Received-Millis: 1584291766080
  X-Android-Response-Source: NETWORK 404
  X-Android-Selected-Protocol: http/1.1
  X-Android-Sent-Millis: 1584291765810
  X-Powered-By: ASP.NET
}

我在这里缺少什么?

在这里,你声明了用户名和密码的路由参数,这是危险的!

[Route("Api/IsUserValid/{username}/{password}")]
public string ValidateUser(string username, string password)

至少你需要使用表单。因此,将代码更改为

[Route("Api/IsUserValid")]
public string ValidateUser([FromForm] string username, [FromForm] string password)

那么您从 xamarin 项目到 post 的代码应该可以在没有任何更改的情况下工作