在Blazor Web及.NET MAUI Blazor中集成Plivo SMS网关的问题咨询
Blazor Web及.NET MAUI Blazor集成Plivo SMS解决方案
一、Blazor WebAssembly 集成方案
Blazor WASM运行在浏览器沙箱环境,无法直接调用Plivo SDK(受限于浏览器权限及SDK的后端依赖特性),必须通过后端API中转实现:
- 创建同.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,通过依赖注入读取,禁止硬编码密钥。
- 安装Plivo NuGet包:
- 在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; } } } - 在API项目的
Program.cs中配置CORS策略,允许Blazor WASM域名访问。
二、Blazor Server 集成方案
Blazor Server运行在服务器端,可直接集成Plivo SDK:
- 安装Plivo NuGet包:
Install-Package Plivo - 在
Program.cs中注册PlivoApi实例(从配置读取密钥):var builder = WebApplication.CreateBuilder(args); var plivoSection = builder.Configuration.GetSection("Plivo"); builder.Services.AddSingleton(new PlivoApi( plivoSection["AuthId"], plivoSection["AuthToken"] )); - 在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(仅适用于测试/内部应用)
- 在MAUI项目中安装Plivo NuGet包:
Install-Package Plivo - 在
MauiProgram.cs中注册PlivoApi:builder.Services.AddSingleton(new PlivoApi( builder.Configuration["Plivo:AuthId"], builder.Configuration["Plivo:AuthToken"] )); - 配置平台网络权限:
- Android:在
AndroidManifest.xml添加权限:<uses-permission android:name="android.permission.INTERNET" /> - iOS:在
Info.plist添加网络权限配置:<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
- Android:在
- 在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
相关产品推荐
相关产品推荐

