New-AzEventGridSubscription «Попытка проверить предоставленную конечную точку» не удалась - PullRequest
0 голосов
/ 03 апреля 2020

Я создал конечную точку в своем C# коде в пути / events. Если событие имеет тип «Microsoft.EventGrid.SubscriptionValidationEvent», я извлекаю ValidationCode и возвращаю 200 с json объектом с validationResponse. Я проверил это с помощью Postman, и все, кажется, работает, но при использовании «New-AzEventGridSubscription» это не удается. Любые идеи?

Вот команда, которую я использовал, конечно, вычистил.

New-AzEventGridSubscription -ResourceGroup MyResourceGroupName -Endpoint https://requestb.in/19qlscd1/events -EventSubscriptionName EventSubscription1 -TopicName Topic1

Пример сообщения:

[
{
"id": "531d4a96-d4c7-43d6-8b4c-e1ff9351b869",
"topic": "scrubbed",
"subject": "",
"data": {
"validationCode": "7062AAC0-656D-4C4C-BDD6-0FA673676D95",
"validationUrl": "scrubbed"
},
"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
"eventTime": "2020-03-30T17:46:15.1827678Z",
"metadataVersion": "1",
"dataVersion": "2"
}
]

Пример ответа:

{
"validationResponse": "7062AAC0-656D-4C4C-BDD6-0FA673676D95"
}

Вот мой код для обработки события. Я проверил это с помощью Ngrok, и, похоже, он работает.

private void HandleEvent(IApplicationBuilder app) 
        { 
            app.Run(async context => 
            { 
                string content; 
                using (var reader = new StreamReader(context.Request.Body)) 
                { 
                    content = reader.ReadToEnd(); 
                } 

                var eventGridEvents = JsonConvert.DeserializeObject<EventGridEvent[]>(content); 

                foreach (var eventGridEvent in eventGridEvents) 
                { 
                    if (eventGridEvent.EventType == "Microsoft.EventGrid.SubscriptionValidationEvent") 
                    { 
                        var eventDataJson = JsonConvert.SerializeObject(eventGridEvent.Data); 
                        var eventData = JsonConvert.DeserializeObject<SubscriptionValidationEventData>(eventDataJson); 

                        var responseData = new SubscriptionValidationResponse() 
                        { 
                            ValidationResponse = eventData.ValidationCode 
                        }; 

                        context.Response.StatusCode = 200; 
                        await context.Response.WriteAsync(JsonConvert.SerializeObject(responseData)); 
                    } 
                    else 
                    { 
                        var deserialized = JsonConvert.DeserializeObject((string)eventGridEvent.Data); 
                        if (typeof(IEnumerable).IsAssignableFrom(deserialized.GetType())) 
                        { 
                            eventGridEvent.Data = (IEnumerable<object>)deserialized; 
                        } 
                        else 
                        { 
                            eventGridEvent.Data = new List<object>() { deserialized }; 
                        } 

                        await HandleMessageListAsync(eventGridEvents.ToList()); 
                    } 
                } 

                context.Response.StatusCode = 200; 
                await context.Response.WriteAsync(string.Empty); 
            }); 
        } 

Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2020

Оказывается, проблема в том, что мой API был возвращен как "Chunked". Microsoft применила патч для поддержки «чанкованных» ответов, и теперь он работает. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...