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

如何通过Microsoft Graph API实现.NET应用与Microsoft Teams通信集成?

.NET应用集成Microsoft Teams内部通信分步方案

一、基础环境准备

  • 确保你的.NET项目基于.NET Core 3.1及以上版本(推荐.NET 6+稳定版)
  • 安装必备NuGet包:Microsoft.Graph(用于调用Teams相关接口)、Microsoft.Identity.Web(处理Azure AD身份验证)

二、Azure AD应用注册(核心前置步骤)

Teams集成依赖Azure AD身份验证,需先完成应用注册:

  1. 登录Azure门户,进入「Azure Active Directory」→「应用注册」→「新注册」
  2. 填写应用名称,账户类型选择「仅此组织目录中的账户」(内部通信场景)
  3. 重定向URI选「Web」,填入你的.NET应用回调地址(本地调试可填https://localhost:5001/signin-oidc)
  4. 注册完成后,记录应用程序(客户端)ID、目录(租户)ID,后续配置要用
  5. 配置API权限:进入「API权限」→「添加权限」→选择「Microsoft Graph」→「委派权限」,添加以下核心权限:
    • Chat.ReadWrite:读写聊天会话
    • ChatMessage.Send:发送聊天消息
    • User.Read:读取当前用户信息
  6. 点击「授予管理员同意」(内部应用需管理员授权后所有用户可使用)
  7. 生成客户端密码:进入「证书和密码」→「客户端密码」→「新客户端密码」,设置过期时间后保存密码值(仅显示一次,务必留存)

三、.NET应用配置与身份验证集成

  1. 在appsettings.json中添加Azure AD和Graph API配置:
"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "你的租户域名",
  "TenantId": "你的租户ID",
  "ClientId": "你的客户端ID",
  "ClientSecret": "你的客户端密码",
  "CallbackPath": "/signin-oidc"
},
"DownstreamApi": {
  "BaseUrl": "https://graph.microsoft.com/v1.0",
  "Scopes": "Chat.ReadWrite ChatMessage.Send User.Read"
}
  1. 在Program.cs(.NET 6+)中配置身份验证与Graph服务:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi(builder.Configuration.GetSection("DownstreamApi").Get<string[]>("Scopes"))
    .AddMicrosoftGraph(builder.Configuration.GetSection("DownstreamApi"))
    .AddInMemoryTokenCaches();

// 启用授权中间件
app.UseAuthorization();

四、核心通信功能实现

通过注入GraphServiceClient调用Microsoft Graph API实现Teams通信功能,以下是常用场景示例:

1. 获取当前用户的Teams聊天列表

private readonly GraphServiceClient _graphClient;

// 构造函数注入GraphServiceClient
public TeamsChatService(GraphServiceClient graphClient)
{
    _graphClient = graphClient;
}

public async Task<List<Chat>> GetUserChatsAsync()
{
    var chats = await _graphClient.Me.Chats.Request().GetAsync();
    return chats.CurrentPage.ToList();
}

2. 发送聊天消息到指定会话

public async Task SendChatMessageAsync(string chatId, string messageContent)
{
    var newMessage = new ChatMessage
    {
        Body = new ItemBody
        {
            ContentType = BodyType.Html,
            Content = messageContent
        }
    };

    await _graphClient.Me.Chats[chatId].Messages.Request().AddAsync(newMessage);
}

3. 创建一对一聊天会话

public async Task<Chat> CreateOneToOneChatAsync(string targetUserId)
{
    // 先获取当前用户ID
    var currentUser = await _graphClient.Me.Request().GetAsync();
    
    var newChat = new Chat
    {
        ChatType = ChatType.OneOnOne,
        Members = new ChatMembersCollectionPage()
        {
            new ChatMember
            {
                Roles = new List<string> { "owner" },
                User = new User { Id = targetUserId }
            },
            new ChatMember
            {
                Roles = new List<string> { "owner" },
                User = new User { Id = currentUser.Id }
            }
        }
    };

    return await _graphClient.Chats.Request().AddAsync(newChat);
}

五、前端集成(按需实现)

如果是MVC/Razor Pages应用,可添加基础交互UI:

  • 登录按钮:<a asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">登录Teams账户</a>
  • 调用后端接口渲染聊天列表,添加消息发送表单

六、测试与部署

  1. 本地测试:启动应用,使用租户内的Microsoft 365账户登录,验证聊天列表、消息发送等功能
  2. 生产部署:更新appsettings.json和Azure AD应用注册中的重定向URI为生产域名,确保服务器可访问Microsoft Graph API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:55:13