You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Blazor Web及.NET MAUI Blazor中集成Plivo SMS网关的问题咨询

Blazor Web及.NET MAUI Blazor集成Plivo SMS解决方案

一、Blazor WebAssembly 集成方案

Blazor WASM运行在浏览器沙箱环境,无法直接调用Plivo SDK(受限于浏览器权限及SDK的后端依赖特性),必须通过后端API中转实现:

  1. 创建同.NET7版本的ASP.NET Core Web API项目,在API中集成Plivo SDK:
    • 安装Plivo NuGet包:Install-Package Plivo
    • 编写发送短信的API接口,示例代码:
      using Plivo;
      using Microsoft.AspNetCore.Mvc;
      
      [ApiController]
      [Route("api/[controller]")]
      public class SmsController : ControllerBase
      {
          private readonly IConfiguration _config;
      
          public SmsController(IConfiguration config)
          {
              _config = config;
          }
      
          [HttpPost("send")]
          public IActionResult SendSms([FromBody] SmsRequest request)
          {
              var api = new PlivoApi(
                  _config["Plivo:AuthId"], 
                  _config["Plivo:AuthToken"]
              );
              try
              {
                  var response = api.Message.Create(
                      src: _config["Plivo:PhoneNumber"],
                      dst: request.PhoneNumber,
                      text: request.MessageContent
                  );
                  return Ok(new { Success = true, MessageId = response.MessageUuid[0] });
              }
              catch (Exception ex)
              {
                  return BadRequest(new { Success = false, Error = ex.Message });
              }
          }
      }
      
      public class SmsRequest
      {
          public string PhoneNumber { get; set; }
          public string MessageContent { get; set; }
      }
      
    • 把Plivo的Auth ID、Auth Token及号码配置到appsettings.json,通过依赖注入读取,禁止硬编码密钥。
  2. 在Blazor WASM项目中,通过HttpClient调用上述API:
    @inject HttpClient Http
    
    @code {
      private async Task SendSms()
      {
          var request = new { 
              PhoneNumber = "+1234567890", 
              MessageContent = "Test SMS from Blazor WASM" 
          };
          var response = await Http.PostAsJsonAsync("api/sms/send", request);
          var result = await response.Content.ReadFromJsonAsync<SmsResponse>();
          // 根据result处理发送结果
      }
    
      public class SmsResponse
      {
          public bool Success { get; set; }
          public string MessageId { get; set; }
          public string Error { get; set; }
      }
    }
    
  3. 在API项目的Program.cs中配置CORS策略,允许Blazor WASM域名访问。

二、Blazor Server 集成方案

Blazor Server运行在服务器端,可直接集成Plivo SDK:

  1. 安装Plivo NuGet包:Install-Package Plivo
  2. 在Program.cs中注册PlivoApi实例(从配置读取密钥):
    var builder = WebApplication.CreateBuilder(args);
    var plivoSection = builder.Configuration.GetSection("Plivo");
    builder.Services.AddSingleton(new PlivoApi(
        plivoSection["AuthId"], 
        plivoSection["AuthToken"]
    ));
    
  3. 在Razor组件中注入PlivoApi并调用:
    @inject PlivoApi PlivoApi
    @inject IConfiguration Config
    
    @code {
      private async Task SendSms()
      {
          try
          {
              var response = await PlivoApi.Message.CreateAsync(
                  src: Config["Plivo:PhoneNumber"],
                  dst: "+1234567890",
                  text: "Test SMS from Blazor Server"
              );
              // 处理成功响应
          }
          catch (Exception ex)
          {
              // 处理错误信息
          }
      }
    }
    
    • 必须使用异步方法CreateAsync,避免阻塞UI线程。

三、.NET MAUI Blazor 集成方案

.NET MAUI Blazor支持两种集成方式,推荐优先使用后端中转:

方式1:后端API中转(安全优先)

同Blazor WASM的方案,通过HttpClient调用后端API发送短信,避免在客户端暴露Plivo密钥。

方式2:直接集成Plivo SDK(仅适用于测试/内部应用)

  1. 在MAUI项目中安装Plivo NuGet包:Install-Package Plivo
  2. 在MauiProgram.cs中注册PlivoApi:
    builder.Services.AddSingleton(new PlivoApi(
        builder.Configuration["Plivo:AuthId"], 
        builder.Configuration["Plivo:AuthToken"]
    ));
    
  3. 配置平台网络权限:
    • Android:在AndroidManifest.xml添加权限:<uses-permission android:name="android.permission.INTERNET" />
    • iOS:在Info.plist添加网络权限配置:<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
  4. 在Blazor组件中注入并调用:
    @inject PlivoApi PlivoApi
    @inject IConfiguration Config
    
    @code {
      private async Task SendSms()
      {
          try
          {
              var response = await PlivoApi.Message.CreateAsync(
                  src: Config["Plivo:PhoneNumber"],
                  dst: "+1234567890",
                  text: "Test SMS from MAUI Blazor"
              );
          }
          catch (Exception ex)
          {
              // 错误处理
          }
      }
    }
    
    • 直接集成会将密钥打包在客户端,存在安全风险,生产环境禁用此方式。

通用排查要点

  • 验证Plivo密钥、账号余额、目标号码格式(需带国际区号,如+1234567890)
  • Blazor WASM需确认API的CORS配置及请求地址正确性
  • 查看Plivo控制台的短信日志,排查平台侧的错误信息

内容的提问来源于stack exchange,提问作者neha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:12:11