尝试创建WebHook订阅时,部署无法验证云事件1.0版架构的Azure函数中的HTTP触发器。我已经确认我的endpoint用适当的响应处理了验证握手。我的事件网格域使用的是云事件1.0版模式。看起来我的Azure函数在验证期间甚至没有被调用,因为在函数的控制台中没有输出。
这应该适用于 Cloud Events v1.0 和 WebHooks 吗?
部署失败,出现以下错误:{"code":"Url验证"," message ":"尝试验证提供的endpointxxxxx失败。"}
这是我的代码:
[FunctionName("ProcessEvent")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
var requestmessage = await req.Content.ReadAsStringAsync();
var message = JToken.Parse(requestmessage);
if (message.Type == JTokenType.Array)
{
// If the request is for subscription validation, send back the validation code.
if (string.Equals((string)message[0]["eventType"],
"Microsoft.EventGrid.SubscriptionValidationEvent",
System.StringComparison.OrdinalIgnoreCase))
{
log.LogInformation("Validate request received");
var myObj = new { validationResponse = message[0]["data"]["validationCode"].ToString() };
var jsonToReturn = JsonConvert.SerializeObject(myObj);
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(jsonToReturn, Encoding.UTF8, "application/json")
};
}
}
else
{
// The request is not for subscription validation, so it's for an event.
// CloudEvents schema delivers one event at a time.
log.LogInformation($"Source: {message["source"]}");
log.LogInformation($"Time: {message["eventTime"]}");
log.LogInformation($"Event data: {message["data"].ToString()}");
}
return req.CreateResponse(HttpStatusCode.OK);
}
CloudEvents v1.0的endpoint验证不同于此处描述的EventGridSchema和CustomInputSchema等交付模式。
出于测试目的,您可以将Webhook.site用于endpoint处理程序。以下屏幕显示了EventGrid为其验证握手发送OPTIONS调用:
注意,endpoint处理程序的地址必须是https。上图可以看到,有一个webhook-request-callback头。复制它的值a放在浏览器上发送。您应该得到以下文本:
"Webhook succesfully validated as a subscription endpoint."
从现在开始,webhook可以收到一条通知消息,参见如下屏幕:
如您所见,CloudEvent v1.0需要为endpoint验证实现HTTP选项响应。以下是此实现的示例:
string webhookcallback = req.Headers.GetValues("WebHook-Request-Callback")?.FirstOrDefault()?.Trim();
if(string.IsNullOrEmpty(webhookcallback) == false)
{
var hrm2 = req.CreateResponse(HttpStatusCode.OK);
hrm2.Headers.Add("WebHook-Request-Origin", "eventgrid.azure.net");
hrm2.Headers.Add("WebHook-Allowed-Rate", "120");
System.Threading.ThreadPool.QueueUserWorkItem(delegate (object state)
{
Task.Delay(5000).Wait();
using(var client = new HttpClient())
{
log.Warning($"{client.GetAsync(webhookcallback).Result.Content.ReadAsStringAsync().Result}");
}
});
return hrm2;
}
将上述代码片段放入您的函数中。请注意,调用WebHook-Request est-Callback地址不能在OPTIONS调用中,它必须在其OK响应返回EventGrid后完成,因此我们有一些延迟和后台线程。如果EventGrid在OPTIONS调用中接受此调用,那就太好了。
我无法在Azure事件网格中添加新的WebHook订阅。有人能帮忙吗?当我添加webhookendpoint时,出现以下错误。
我在 中配置任何<code>传递属性(如授权或内容类型头),我将面临一个问题(无法订阅webhook),如下所示。请参阅下面的附件了解错误详细信息(如图右侧所示)。 具有 Webhook 传递属性的事件网格订阅失败 有人能帮我一下吗? 提前感谢, 阿育王
我正试图开发一个Azure函数来处理由事件中心的捕获功能创建的blob。然而,尽管捕获blobs被正确地存储在容器中,但似乎没有< code>Microsoft。EventHub . capturefile created 事件发布到函数订阅。功能endpoint的事件订阅已创建,没有错误,Azure CLI的输出为 该函数的主体是一个标准的Http触发器,其中包含事件网格endpoint订阅所需
我正在尝试过滤事件网格中的事件,使其仅在我的订阅中的Azure功能更改时触发(例如配置更改、代码更新或创建/删除新功能)。 我使用的 PowerShell 脚本如下所示: 这将过滤到所有功能和网站(请检查<code>和$AdvancedFilters)。是否有任何方法可以将事件仅过滤到Azure函数?欢迎使用Azure CLI、portal、Powershell或.net sdk中的任何解决方案帮
基本上,我试图使用ARM部署一个事件网格订阅来收集订阅中的特定事件(主题类型= Azure订阅)。我已经有一个创建了事件网格触发功能的功能应用程序,只需要将该功能与事件网格订阅绑定为webhook。 我正在使用Azure DevOps中的发布管道来自动化整个工作流。 以下是我使用的一个示例: 这最终部署了事件网格主题,而不是事件网格订阅。 然后,有人建议我尝试以下操作: 但是这最终以这个错误而失败
我目前正在使用节点js将主题发布到事件网格,并通过事件网格订阅主题。在https://docs.microsoft.com/en-us/rest/api/eventgrid/使用事件网格API时,我收到一个错误,其中我在创建订阅时无权执行操作。我创建了一个主题并具有访问我的Azure帐户的门禁权限,因此我不明白为什么会出现这个Rest错误。 我的代码: 输出: 感谢您的帮助!