c# - 使用 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 日志上没有任何内容。
我错过了什么?
解决方案
我发现了问题。似乎在使用 Net Core Http Client 时,基地址必须仅为:
https://api.mailgun.net
其他所有内容都必须在资源中,例如:
v3/sandbox{id}.mailgun.org/messages
推荐阅读
- routing - TYPO3 9.5:RealURL 迁移 - postVarSets - Extbase RouteEnhancer
- javascript - 具有总和(非计数)总数的聚集传单标记:如何获得一致的圆形红色形状和标签格式,如非聚集标记
- scala - 当我的项目中已经添加了依赖项时,为什么必须将 jars 添加到类路径才能运行 jar 文件?
- r - 在ggplot中移动文本的位置
- vba - 无法从 Access VBA 中选择正确的活动文档(单词)
- c# - Unity 3D AI 敌人旋转错误
- javascript - 如何使用 Angular Directive 在 HTML 文本框元素内设置默认值。请参考以下代码
- java - 如何将消息直接发送到停车场队列,防止重新排队并退出程序流程?
- regex - spark.read.json 中的正则表达式
- terraform - 具有嵌套列表的 Terraform 动态块