如何在C#中通过代理访问Teams通话通知URL并注册Webhook
通过代理配置实现Microsoft Graph Webhook订阅(Teams通话记录)
要让GraphServiceClient通过代理访问你的NotificationUrl并完成Webhook注册,核心是给Graph SDK配置自定义HttpClient——因为Graph的所有请求(包括Webhook验证阶段的回调请求)都会通过这个HttpClient发送。具体实现步骤如下:
1. 创建带代理配置的HttpClient实例
先构建包含代理设置的HttpClientHandler,再用它初始化HttpClient:
// 配置代理地址和端口 var proxy = new WebProxy("http://你的代理地址:端口号") { // 如果代理需要认证,添加对应凭据 Credentials = new NetworkCredential("代理用户名", "代理密码") }; var httpClientHandler = new HttpClientHandler { Proxy = proxy, UseProxy = true }; // 初始化带代理的HttpClient var httpClient = new HttpClient(httpClientHandler);
2. 用自定义HttpClient初始化GraphServiceClient
替换默认的GraphServiceClient初始化方式,将上面配置好的HttpClient传入:
// 假设你已通过认证获取到TokenCredential(如ClientSecretCredential) var graphServiceClient = new GraphServiceClient(httpClient, tokenCredential);
3. 执行原有的Webhook订阅代码
使用配置好代理的GraphServiceClient,正常创建通话记录订阅即可:
var sub = new Microsoft.Graph.Subscription(); sub.ChangeType = "created"; sub.NotificationUrl = _options.WebhookNoticationUrl; sub.Resource = "communications/callRecords"; sub.ExpirationDateTime = DateTime.UtcNow.AddHours(Convert.ToInt32(_options.WebhookExpirationTime)); sub.ClientState = _options.ClientState; var newSubscription = await graphServiceClient .Subscriptions .Request() .AddAsync(sub);
关键说明
创建订阅时,Microsoft Graph会向你的NotificationUrl发送验证请求确认端点有效性,这个验证请求会通过你配置的代理发送,从而完成Webhook的注册流程。如果代理需要额外的SSL证书信任,还可以在HttpClientHandler中添加证书验证逻辑。
内容的提问来源于stack exchange,提问作者Anand Gole
相关产品推荐
相关产品推荐

