创建图形 Webhook 订阅,为什么会收到此消息? "Response must exactly match validationToken query parameter"



我是Graph的新手。我正在尝试订阅/users 中的更改。这是我的标题和 POST 到 Graph:

//HTTP POST
//Host: https://graph.microsoft.com/v1.0/subscriptions
//Content-Type:applicaton/json
//Authorization: {auth key}
{
"changeType":"updated"
,"clientState":"myClientState"
,"resource":"/users"
,"notificationUrl":"[ngrok URL tunneling back to my local debug api instance]"
,"expirationDateTime":"2020-05-23T04:30:28.2257768+00:00"
}

这是我的核心 Web API 上的相关代码,它从 Graph 获取响应:

// POST api/values
public IHttpActionResult Post ([FromUri]string validationToken)
{
Debug.WriteLine("validationToken string is: " + validationToken);

if (!String.IsNullOrEmpty(validationToken))
{
Debug.WriteLine("Token received, sending back token: " + validationToken);
return Ok(validationToken);
}
else
{
//...
}
}

我已经通过 Postman 点击它来测试这一点,它完全按照预期发回它收到的任何查询参数。当我向 Graph 发送 POST 调用时,我的 Web API 会得到响应。它有一个参数:

key: validationToken
value: 'Validation: Testing client application reachability for subscription Request-Id: ea95e0a8-55c6-42db-b7e6-441920ae9c15'

这就是我发回的。我总是在以下之后收到此错误:

{
"error": {
"code": "InvalidRequest",
"message": "Subscription validation request failed. Response must exactly match validationToken query parameter.",
"innerError": {
"request-id": "ea95e0a8-55c6-42db-b7e6-441920ae9c15",
"date": "2020-05-18T20:07:17"
}
}
}

我尝试了不同的编码并确认我的身份验证令牌有效,并且所有端点都正常到达彼此。 老实说,这看起来并不像我期望的验证令牌的样子 - 甚至如此吗?我在 POST 正文中看不到任何其他内容,也没有其他参数。下面是包含查询参数的确切请求 URI:

https://localhost:44391/api/values?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+ea95e0a8-55c6-42db-b7e6-441920ae9c15

确保验证令牌以纯/文本内容类型返回。例如:

public IHttpActionResult Post([FromUri] string validationToken) {
Debug.WriteLine("validationToken string is: " + validationToken);
if (!String.IsNullOrEmpty(validationToken)) {
Debug.WriteLine("Token received, sending back token: " + validationToken);
return this.ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK) {
Content = new StringContent(validationToken)
});
}
else {
return this.InternalServerError();
}
}

return Ok(validationToken);替换为return Content(validationToken);

Ok 期望参数是一个对象,并且可能会根据请求和管道配置包装使用 JSON 或 XML 传入的内容。

内容要求参数为字符串,并按原样返回。 可以使用 postman 集合来验证终结点的验证实现,并查看示例以获取详细信息。

相关内容

最新更新