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

.NET 6.0独立进程Azure Function添加Graph Webhook订阅失败求助

解决.NET 6独立进程Azure Function中Microsoft Graph通话记录Webhook订阅验证失败问题

问题描述

原在.NET Core 6进程内模式Azure Function中正常运行的Microsoft Graph通话记录(communications/callRecords)Webhook订阅代码,迁移至.NET 6独立进程模式后,执行时触发错误:Subscription validation request failed. Response must exactly match。

核心原因

独立进程模式下,Azure Function的HTTP请求处理机制与进程内模式不同,默认会对响应进行额外包装或修改格式,而Microsoft Graph的Webhook验证要求响应完全匹配传入的validationToken值,不允许任何额外内容、头部或格式变更。

解决方案

1. 严格实现Webhook验证端点的响应逻辑

在独立进程模式的HTTP Function中,直接返回纯文本格式的validationToken,避免任何JSON包装或多余头部:

[Function("WebhookNotification")]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
{
    // 提取验证token
    var validationToken = req.Query["validationToken"].FirstOrDefault();
    
    if (!string.IsNullOrEmpty(validationToken))
    {
        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "text/plain");
        // 直接写入原始token,无任何额外字符
        response.WriteString(validationToken);
        return response;
    }

    // 处理正常的通知逻辑(非验证请求)
    var response = req.CreateResponse(HttpStatusCode.OK);
    // 此处添加通知处理代码
    return response;
}

关键注意点:必须设置Content-Type为text/plain,响应内容必须是原始validationToken字符串,不能包含引号、换行或其他附加内容。

2. 禁用自动响应格式化

独立进程模式中,避免使用会自动序列化响应的逻辑:

  • 不要返回自定义对象让Function自动序列化为JSON;
  • 检查Program.cs中是否添加了修改响应格式的中间件(如AddJsonOptions),确保这些配置不会影响Webhook端点的响应。

3. 覆盖默认的响应处理行为

如果Function仍存在默认的响应包装,可通过自定义响应完全控制输出:

// 确保响应无任何额外编码或包装
response.Body.Write(Encoding.UTF8.GetBytes(validationToken));
response.Headers.ContentLength = Encoding.UTF8.GetByteCount(validationToken);

4. 验证响应正确性

使用curl或Postman模拟验证请求,确认响应符合要求:

  • 发送GET请求:GET https://<your-function-url>/api/WebhookNotification?validationToken=test-token-123
  • 检查响应:状态码200,Content-Type为text/plain,响应体完全等于test-token-123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:45:10