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

如何在SendgridSendRequest请求中正确添加API密钥?

问题原因

你当前定义的SendgridSendRequest是用来序列化邮件发送接口的请求体载荷的,Sendgrid的API密钥不属于请求体参数,不需要添加到这个类中——Sendgrid v3 API要求API密钥通过HTTP请求头传递,你之前找不到正确配置位置是因为找错了参数传递的层级。

可行实现方案

Sendgrid 官方要求的鉴权规则固定为:在HTTP请求头中携带 Authorization: Bearer <你的API密钥>,以下是两种常用实现方式:

方案1:原生HttpClient手动调用API

如果是自己封装HTTP请求逻辑,在构造请求时单独给HttpClient添加鉴权头即可,不需要修改你现有的SendgridSendRequest类:

using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

// 建议从环境变量/配置文件读取密钥,禁止硬编码在代码中
var apiKey = Environment.GetEnvironmentVariable("SENDGRID_API_KEY");
// 若使用.NET Core/.NET 6+配置体系,也可以从IConfiguration读取:
// var apiKey = configuration["Sendgrid:ApiKey"];

// 构造你的请求体对象,这部分不需要改动
var mailRequest = new SendgridSendRequest
{
    To = "recipient@example.com",
    From = "verified-sender@yourdomain.com",
    Subject = "邮件主题",
    Text = "邮件纯文本正文"
};

// 序列化请求体
var json = JsonSerializer.Serialize(mailRequest);
var content = new StringContent(json, Encoding.UTF8, "application/json");

// 注意:生产环境建议通过IHttpClientFactory创建HttpClient,不要手动new
using var httpClient = new HttpClient();
// 核心:添加API密钥鉴权头,这才是密钥的正确配置位置
httpClient.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Bearer", apiKey);

// 调用Sendgrid发信接口
var response = await httpClient.PostAsync(
    "https://api.sendgrid.com/v3/mail/send", 
    content);
// 校验请求结果
response.EnsureSuccessStatusCode();

方案2:使用官方Sendgrid SDK(推荐)

如果不想自己处理HTTP请求细节,可以直接安装官方NuGet包SendGrid,SDK初始化时直接传入API密钥即可,不需要自己定义请求类:

using SendGrid;
using SendGrid.Helpers.Mail;

var apiKey = Environment.GetEnvironmentVariable("SENDGRID_API_KEY");
var client = new SendGridClient(apiKey);

var from = new EmailAddress("verified-sender@yourdomain.com");
var to = new EmailAddress("recipient@example.com");
var msg = MailHelper.CreateSingleEmail(
    from, 
    to, 
    "邮件主题", 
    "邮件纯文本正文", 
    "<h1>邮件HTML正文</h1>");

var response = await client.SendEmailAsync(msg);
常见踩坑提醒
  • 不要把API密钥作为属性添加到SendgridSendRequest类中:这个类序列化后会作为请求体传递,Sendgrid不会从请求体中读取鉴权信息,塞进去只会返回401未授权错误
  • 鉴权头格式不能写错:必须是Bearer前缀+空格+API密钥,不要漏写前缀,也不要把前缀写成Basic等其他值
  • 发信使用的From邮箱必须是你在Sendgrid后台验证过的发件人域名/邮箱,否则会请求失败
  • API密钥不要硬编码在代码中,避免提交到代码仓库造成密钥泄露,优先使用环境变量、密钥管理服务存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:51:42