我正在尝试为使用EventGridTrigger的Azure函数创建 EventGridSubscription 。 运行 New-AzureRmEventGridSubscription cmdlet时,出现以下错误:
网址验证:验证提供的端点https://blablafunction.azurewebsites.net/admin/EventGridExtensionConfig的尝试失败。
这是天蓝色的功能代码:
[FunctionName("BlobCreatedHandler")]
public static async Task Run([EventGridTrigger]JObject blobEvent,
[Queue("blob-created-queue", Connection = Strings.StorageAccountConnection)] CloudQueue blobCreatedQueue,
[Inject(typeof(IBlobCreatedHandler))] IBlobCreatedHandler blobCreatedHandler)
{
await blobCreatedHandler.Handle(blobEvent, blobCreatedQueue);
}
我尝试了不同版本的AzureRM.EventGrid模块。有趣的是,在低于0.3.0的版本上它可以正常工作。但是从0.3.1开始的所有最新版本都失败,并出现此错误。 有人会经历同样的经历吗?
UPD: Fiddler说,两个版本的SDK(好一个和坏一个)都发送完全相同的请求:
{
"properties": {
"destination": {
"endpointType": "WebHook",
"properties": {
"endpointUrl": "https://blobmalwarescanapptest.azurewebsites.net/admin/EventGridExtensionConfig?functionName=TestFunc&code=PhWghMXtSma188UQccaoErA4Eiw7ygudguHkpq1V0XKMfzA59yBR5g=="
}
},
"filter": {
"includedEventTypes": [
"All"
],
"isSubjectCaseSensitive": false
}
}
,并获得完全相同的响应。 但是在更新版本的SDK上,好像Azure EventGrid管理端点会截断“?”之后的所有内容签名并尝试验证基本网址(没有查询参数)。
答案 0 :(得分:0)
我刚刚使用ARM模板来达到相同的结果。对我有用的端点是:
https://<FunctionAppName>.azurewebsites.net/runtime/webhooks/EventGrid?functionName=<functionName>&code=<code>
尽管这也适用于v2的azure函数,但我看到您正在使用v1(因为JObject作为eventgrid触发器)。
编辑:我的ARM模板示例:
{
"type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
"name": "[concat(variables('MobileStorageName'), '/Microsoft.EventGrid/', variables('EventSubscriberName'))]",
"apiVersion": "2018-01-01",
"dependsOn": [
"[variables('MobileStorageName')]"
],
"tags": {
"displayName": "Storage Account Event Subscription"
},
"properties": {
"destination": {
"endpointType": "WebHook",
"properties": {
"endpointUrl": "[variables('FunctionAppEndpoint')]"
}
},
"filter": {
"subjectBeginsWith": "",
"subjectEndsWith": "",
"isSubjectCaseSensitive": false,
"includedEventTypes": [ "Microsoft.Storage.BlobCreated" ]
}
}
}
请注意,在我的情况下,我需要StorageV2(它是2018-02-1 API),否则它不起作用。