如何将POST请求发送到远程服务器?

时间:2019-09-18 14:01:34

标签: c# asp.net-core .net-core

我的网站需要将请求发布到远程服务器以使用其API。

我在Google中使用HttpClient找到了一种方法,就像这样:

public async Task<string> HttpPostAsync(string uri, string url, List<KeyValuePair<string, string>> formData = null, string charset = "UTF-8", string mediaType = "application/x-www-form-urlencoded")
    {

      string tokenUri = url;
      var client = new HttpClient();
      client.BaseAddress = new Uri(uri);
      HttpContent content = new FormUrlEncodedContent(formData);
      content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
      content.Headers.ContentType.CharSet = charset;
      for (int i = 0; i < formData.Count; i++)
      {
        content.Headers.Add(formData[i].Key, formData[i].Value);
      }

      HttpResponseMessage resp = await client.PostAsync(tokenUri, content);
      resp.EnsureSuccessStatusCode();
      string token = await resp.Content.ReadAsStringAsync();
      return token;
    }

这种方式有效,但示例来自2017年.NET Core 1.1刚刚发布。

.NET Core 3.0现在可用了,我想知道是否还有其他更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

HttpClient仍然是在.NET中直接进行HTTP调用的最简单/最佳方法。对于始终发布表单内容的方法,您可以对其进行一些简化(无需每次都指定媒体类型,字符集等):

public static async Task<string> Post(string url, IEnumerable<KeyValuePair<string, string>> formData)
{
    var client = new HttpClient();
    var formContent = new FormUrlEncodedContent(formData);
    var response = await client.PostAsync(url, formContent);

    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

var stringResponse = await Post("https://so57994582.free.beeceptor.com",
    new Dictionary<string, string>() { { "hello", "world" } });