首页 > 解决方案 > 使用 Net Core HttpClient 调用 API

问题描述

使用 ASP.NET Core 3.1 和 RestSharp 我正在调用 Mailgun API 以发送电子邮件:

RestClient client = new RestClient ();
client.BaseUrl = new Uri ($"https://api.mailgun.net/v3/sandbox{id}.mailgun.org");
client.Authenticator = new HttpBasicAuthenticator ("api", key);
RestRequest request = new RestRequest();
request.Resource = "messages";
request.AddParameter ("from", "John <john@example.com>");
request.AddParameter ("to", "mary@example.com");
request.AddParameter ("subject", "Hello API RestSharp");
request.AddParameter ("text", "Testing Mailgun!");
request.Method = Method.POST;
IRestResponse response = client.Execute(request);

这工作正常。然后我对 ASP.NET Core HttpClient 进行了同样的尝试:

try {

  using (var client = new HttpClient { BaseAddress = new Uri($"https://api.mailgun.net/v3/sandbox{id}.mailgun.org") }) {

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(Encoding.ASCII.GetBytes($"api:{key}")));

    var content = new FormUrlEncodedContent(new[] {
      new KeyValuePair<String, String>("from", "John <john@example.com>"),
      new KeyValuePair<String, String>("to", "mary@example.com"),
      new KeyValuePair<String, String>("subject", "Hello API Net Core"),
      new KeyValuePair<String, String>("text", "Testing Mailgun!")
    });

    var result = await client.PostAsync("messages", content);

  }

} catch(Exception e) {

  var ex = e;

}

我收到了 OK 回复,但未发送电子邮件,并且 Mailgun 日志上没有任何内容。

我错过了什么?

标签: c#asp.net-coredotnet-httpclientmailgunasp.net-core-3.1

解决方案


我发现了问题。似乎在使用 Net Core Http Client 时,基地址必须仅为:

 https://api.mailgun.net

其他所有内容都必须在资源中,例如:

v3/sandbox{id}.mailgun.org/messages

推荐阅读