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

.NET Core控制器向Microsoft Teams发消息如何创建authProvider

解决方案

1. 前置Azure配置

  • 登录Azure门户进入Azure Active Directory,选择「应用注册」>「新建注册」,填写应用名称,受支持账户类型选「仅限当前组织目录中的账户」,无需填写重定向URI,完成注册。
  • 记录注册完成后生成的客户端ID、租户ID,进入「证书和机密」页面新建客户端机密,记录生成的机密值(仅显示一次,需妥善保存)。
  • 进入「API权限」页面,选择「添加权限」>「Microsoft Graph」>「应用程序权限」,搜索并勾选ChannelMessage.Send权限,点击「授予管理员同意」完成权限配置。

2. 安装依赖NuGet包

在你的.NET Core项目中安装两个包:

Microsoft.Graph
Azure.Identity

3. 注册Graph客户端

新版Graph SDK可以直接使用Azure.Identity提供的凭证类生成授权提供方,无需手动实现IAuthenticationProvider。在Program.cs中注册单例的GraphServiceClient:

using Azure.Identity;
using Microsoft.Graph;

// 其他配置省略
builder.Services.AddSingleton(sp =>
{
    // 生产环境建议从配置文件/KeyVault读取敏感信息,不要硬编码
    var tenantId = "你的Azure AD租户ID";
    var clientId = "你注册应用的客户端ID";
    var clientSecret = "你生成的客户端机密";
    var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
    return new GraphServiceClient(credential);
});

4. 改造控制器代码

直接注入已经配置好授权的GraphServiceClient即可使用:

[ApiController]
[Route("[controller]")]
public class TeamsController : ControllerBase
{
    private readonly GraphServiceClient _graphClient;

    public TeamsController(GraphServiceClient graphClient)
    {
        _graphClient = graphClient;
    }

    [HttpGet]
    [Route("SendMessage")]
    [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(string))]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    public async Task<IActionResult> SendMessageToTeams(string message) {
        try {
            var chatMessage = new ChatMessage {
                Body = new ItemBody {
                    Content = message
                }
            };
            await _graphClient.Teams["你的团队ID"].Channels["你的频道ID"].Messages
                             .Request()
                             .AddAsync(chatMessage);
            return Ok("消息发送成功");
        }
        catch (Exception ex) {
            // 建议添加日志记录异常详情方便排查
            return BadRequest($"发送失败:{ex.Message}");
        }
    }
}

注意事项

  • 团队ID和频道ID可以在Teams中右键对应团队/频道,选择「获取链接」从链接地址中提取。
  • 必须选择应用程序权限而非委托权限,后台服务无登录用户场景下委托权限不生效,且必须完成管理员授权操作。
  • 生产环境不要硬编码客户端机密、ID等敏感信息,建议存入配置文件、密钥管理服务中读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 00:06:04