C# 如何向远程服务器发送POST请求?

C# 如何向远程服务器发送POST请求?,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我的网站需要向远程服务器发送请求以使用其API 我在谷歌找到了一种使用HttpClient的方法,就像这样: public async Task<string> HttpPostAsync(string uri, string url, List<KeyValuePair<string, string>> formData = null, string charset = "UTF-8", string mediaType = "application/x-w

我的网站需要向远程服务器发送请求以使用其API

我在谷歌找到了一种使用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;
    }
公共异步任务HttpPostAsync(字符串uri、字符串url、列表formData=null、字符串charset=“UTF-8”、字符串mediaType=“应用程序/x-www-form-urlencoded”) { 字符串tokenUri=url; var client=新的HttpClient(); client.BaseAddress=新Uri(Uri); HttpContent=新的FormUrlEncodedContent(formData); content.Headers.ContentType=新的MediaTypeHeaderValue(mediaType); content.Headers.ContentType.CharSet=字符集; for(int i=0;i 这种方法是可行的,但这个例子是从2017年开始的,当时.NET Core 1.1刚刚发布


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

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

公共静态异步任务Post(字符串url,IEnumerable formData)
{
var client=新的HttpClient();
var formContent=new FormUrlEncodedContent(formData);
var response=wait client.PostAsync(url、formContent);
response.EnsureSuccessStatusCode();
return wait response.Content.ReadAsStringAsync();
}
var stringResponse=wait Post(“https://so57994582.free.beeceptor.com",
新字典(){{“你好”,“世界”});

我不认为“return wait response…”中的wait是needed@John之所以需要它,是因为
ReadAsStringAsync
返回一个任务。是的:并且您的方法希望您返回一个任务是的,但是该方法被标记为
async
,这意味着如果该方法返回
string
,编译器将自动返回
任务。如果您删除最后一行中的
wait
,代码将无法编译。@NateBarbettini-我正在收集您丢弃的内容。非常感谢。
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" } });