📜  创建使用自己的 api 发送电子邮件和短信的 asp.net - C# (1)

📅  最后修改于: 2023-12-03 15:22:40.541000             🧑  作者: Mango

创建使用自己的 API 发送电子邮件和短信的 ASP.NET - C#

在本文中,我们将讨论如何在 ASP.NET - C# 中创建自己的 API 以发送电子邮件和短信。通过编写自己的 API,我们可以轻松地将这些功能集成到我们的应用程序中,并提供更好的控制和可扩展性。

需求

首先,我们需要明确我们的需求。我们的 API 应该具备以下功能:

  • 能够发送电子邮件。
  • 能够发送短信。
  • 必须具有安全性和授权限制。
  • 容易地集成到我们的 ASP.NET 应用程序中。
解决方案

为了实现这些需求,我们将使用以下技术:

  • ASP.NET Web API:用于编写我们的 API。
  • SendGrid:用于电子邮件发送。
  • Twilio:用于短信发送。
  • API 密钥:用于安全性和授权限制。
创建项目

首先,创建一个名为“MyAPI”的空的 ASP.NET Web API 项目。然后,添加以下 NuGet 包:

  • SendGrid
  • Twilio

这些包将为我们提供发送电子邮件和短信的便利方法,因此我们无需自己编写代码。

创建 API 控制器

接下来,创建一个名为“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/emailhttp://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_hereyour_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(未经授权)错误。

集成到 ASP.NET 应用程序中

现在,我们已经创建了自己的 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 请求。

请注意,我们必须将参数传递为字典,并使用以下名称:

  • to:收件人的电子邮件地址或电话号码。
  • subject:电子邮件主题(仅适用于电子邮件)。
  • body:电子邮件正文或短信正文。

这将发送一个 POST 请求到我们的 API,并返回发送结果。您可以使用 response.Content.ReadAsAsync<Response>() 将结果读取为 Response 对象。

总结

在本文中,我们探讨了如何在 ASP.NET - C# 中创建自己的 API 以发送电子邮件和短信。我们使用 SendGrid 和 Twilio 平台进行邮件和短信发送,并使用 API 密钥实现了安全性和授权限制。我们还演示了如何将 API 集成到我们的 ASP.NET 应用程序中。