📅  最后修改于: 2023-12-03 15:22:40.541000             🧑  作者: Mango
在本文中,我们将讨论如何在 ASP.NET - C# 中创建自己的 API 以发送电子邮件和短信。通过编写自己的 API,我们可以轻松地将这些功能集成到我们的应用程序中,并提供更好的控制和可扩展性。
首先,我们需要明确我们的需求。我们的 API 应该具备以下功能:
为了实现这些需求,我们将使用以下技术:
首先,创建一个名为“MyAPI”的空的 ASP.NET Web API 项目。然后,添加以下 NuGet 包:
这些包将为我们提供发送电子邮件和短信的便利方法,因此我们无需自己编写代码。
接下来,创建一个名为“CommunicationsController”的 API 控制器。这个控制器将包含我们的电子邮件和短信的发送代码。
using System.Web.Http;
namespace MyAPI.Controllers
{
[RoutePrefix("api/communications")]
public class CommunicationsController : ApiController
{
[HttpPost]
[Route("email")]
public IHttpActionResult SendEmail(string to, string subject, string body)
{
// Send email code here
}
[HttpPost]
[Route("sms")]
public IHttpActionResult SendSms(string to, string body)
{
// Send SMS code here
}
}
}
这段代码创建了一个名为“CommunicationsController”的 API 控制器。注意控制器类必须从 ApiController
类继承。该类包含两个 POST 方法,用来发送电子邮件和短信。
注意,我们使用了 [RoutePrefix]
和 [Route]
属性来指定 URL。这使得我们的 API 可以访问 http://localhost:port/api/communications/email
和 http://localhost:port/api/communications/sms
这样的 URL。
现在,我们需要添加一些代码来发送电子邮件。我们将使用 SendGrid 平台来发送电子邮件。SendGrid 是一种流行的云服务,可用于向电子邮件收件人发送电子邮件。
要开始使用 SendGrid,您需要在其网站上注册并创建 API 密钥。
对于发送电子邮件,我们将使用以下代码:
[HttpPost]
[Route("email")]
public IHttpActionResult SendEmail(string to, string subject, string body)
{
// Create a new SendGrid client
var client = new SendGridClient("your_api_key_here");
// Create a new email message
var message = new SendGridMessage();
message.SetFrom("your_from_email_here@example.com");
message.AddTo(to);
message.SetSubject(subject);
message.AddContent(MimeType.Text, body);
// Send the email message
var response = client.SendEmailAsync(message).Result;
// Return the response
return Ok(response);
}
这将创建一个名为“SendEmail”的 POST 方法,用于发送电子邮件。该方法使用 SendGrid API 客户端和 API 密钥来创建和发送电子邮件消息。
注意,我们在代码中用 your_api_key_here
替换了实际的 API 密钥。您应该将此替换为您自己的 API 密钥。
对于发送短信,我们将使用 twilio 平台。Twilio 提供了非常相似的服务,它们使用 API 发送短信而不是电子邮件。
要使用 Twilio,您需要在其网站上注册并购买短信信用点并创建 API 密钥。
[HttpPost]
[Route("sms")]
public IHttpActionResult SendSms(string to, string body)
{
// Create a new Twilio client
var accountSid = "your_account_sid_here";
var authToken = "your_auth_token_here";
var client = new Twilio.Rest.Client(accountSid, authToken);
// Create a new SMS message
var message = MessageResource.Create(
body: body,
from: new Twilio.Types.PhoneNumber("+15555555555"), // Replace with your Twilio number
to: new Twilio.Types.PhoneNumber(to)
);
// Return the response
return Ok(message);
}
这段代码创建了一个名为“SendSms”的 POST 方法,用于发送短信。该方法使用 Twilio API 客户端和 API 密钥来创建和发送短信消息。
注意,我们在代码中用 your_account_sid_here
和 your_auth_token_here
替换了实际的 API 凭据。您应该将此替换为您自己的 API 凭据。
最后,我们需要确保我们的 API 保持安全并限制访问。为此,我们将使用 API 密钥来实现这一点。
首先,在我们的 Web.config
文件中添加一个新的节点来存储我们的 API 密钥:
<configuration>
<appSettings>
<add key="MyApiKey" value="your_api_key_here" />
</appSettings>
<system.web>
...
</system.web>
<system.webServer>
...
</system.webServer>
</configuration>
接下来,我们将添加一个新的属性来检查 API 密钥。对于每个请求,我们将检查该请求的头部中是否包含正确的 API 密钥。如果不包含,则返回 401(未经授权)错误:
using System.Web.Http;
namespace MyAPI.Controllers
{
[RoutePrefix("api/communications")]
public class CommunicationsController : ApiController
{
private const string ApiKeyName = "MyApiKey";
private readonly string _apiKey = ConfigurationManager.AppSettings[ApiKeyName];
[HttpPost]
[Route("email")]
public IHttpActionResult SendEmail(string to, string subject, string body)
{
if (!IsApiKeyValid())
return Unauthorized();
// Send email code here
}
[HttpPost]
[Route("sms")]
public IHttpActionResult SendSms(string to, string body)
{
if (!IsApiKeyValid())
return Unauthorized();
// Send SMS code here
}
private bool IsApiKeyValid()
{
var apiKey = Request.Headers.FirstOrDefault(x => x.Key == ApiKeyName).Value?.FirstOrDefault();
return apiKey != null && apiKey == _apiKey;
}
}
}
这段代码创建了一个名为“IsApiKeyValid”的私有方法。该方法从 HTTP 请求的头部中获取 API 密钥,并将其与存储在 Web.config
文件中的 API 密钥进行比较。如果它们匹配,则返回 true,否则返回 false。
在发送电子邮件和短信之前,我们在这些方法中检查 API 密钥是否有效。如果 API 密钥不匹配,则返回 401(未经授权)错误。
现在,我们已经创建了自己的 API 来发送电子邮件和短信,并对其进行了安全性和授权限制。
最后,我们需要将 API 集成到我们的 ASP.NET 应用程序中。为此,我们需要使用 HttpClient
类来发送 POST 请求。以下是示例代码:
using System.Net.Http;
var client = new HttpClient();
var apiUrl = "http://localhost:port/api/communications/email"; // or "http://localhost:port/api/communications/sms"
var parameters = new Dictionary<string, string>
{
{ "to", "recipient_email_or_phone_number_here" },
{ "subject", "email_subject_here" },
{ "body", "email_body_here" }
// or just { "body", "sms_body_here" } for SendSms method
};
var content = new FormUrlEncodedContent(parameters);
var response = await client.PostAsync(apiUrl, content);
var result = await response.Content.ReadAsAsync<Response>();
这将创建一个名为“client”的 HTTP 客户端,用于发送 POST 请求。我们将指定我们的 API URL,并使用 FormUrlEncodedContent
类将参数传递给 POST 请求。
请注意,我们必须将参数传递为字典,并使用以下名称:
这将发送一个 POST 请求到我们的 API,并返回发送结果。您可以使用 response.Content.ReadAsAsync<Response>()
将结果读取为 Response
对象。
在本文中,我们探讨了如何在 ASP.NET - C# 中创建自己的 API 以发送电子邮件和短信。我们使用 SendGrid 和 Twilio 平台进行邮件和短信发送,并使用 API 密钥实现了安全性和授权限制。我们还演示了如何将 API 集成到我们的 ASP.NET 应用程序中。