У меня есть Premium Azure Сервисная шина, отправляющая сообщения на «productupdate» topi c. В настоящее время я использую приложение Logi c для получения сообщения, но это не совсем то, что я хотел бы сделать. Вместо этого я хотел бы, чтобы Event Grid обрабатывал эти сообщения и запускал веб-хук до конечной точки в моем интерфейсе управления API. Проблема, с которой я сталкиваюсь, заключается в настройке конечной точки в управлении API для возможности принимать веб-хук (код проверки?).
Я прочитал всю документацию, сообщения в блогах и сообщения на форуме, которые могу найти по теме, но ничего не работает до сих пор. Конечная точка моего веб-хука, которую я пытаюсь использовать: " https: // [apim]. azure -api.net / OrdersService / v1 / Products? Subscription-key = [apim-key] .
Во входящих политиках для этой конечной точки в APIM у меня есть следующее:
<set-variable name="Event" value="@(context.Variables.GetValueOrDefault<JArray>("Request")[0])" />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<JObject>("Event")["eventType"].ToString() == "Microsoft.EventGrid.SubscriptionValidationEvent")">
<return-response>
<set-status code="200" />
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>@{
var validationResponse = new JObject(new JProperty("validationResponse",context.Variables.GetValueOrDefault<JObject>("Event")["data"]["validationCode"].ToString()));
return validationResponse.ToString();
}</set-body>
</return-response>
</when>
<otherwise>
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-header name="X-Event-Id" exists-action="override">
<value>@(context.Variables.GetValueOrDefault<JObject>("Event")["id"].ToString())</value>
</set-header>
<set-header name="X-Event-Subject" exists-action="override">
<value>@(context.Variables.GetValueOrDefault<JObject>("Event")["subject"].ToString())</value>
</set-header>
<set-header name="X-Event-Type" exists-action="override">
<value>@(context.Variables.GetValueOrDefault<JObject>("Event")["eventType"].ToString())</value>
</set-header>
<set-header name="X-Event-Time" exists-action="override">
<value>@(context.Variables.GetValueOrDefault<JObject>("Event")["eventTime"].ToString())</value>
</set-header>
<set-header name="X-Event-Data-Version" exists-action="override">
<value>@(context.Variables.GetValueOrDefault<JObject>("Event")["dataVersion"].ToString())</value>
</set-header>
<set-header name="X-Event-Metadata-Version" exists-action="override">
<value>@(context.Variables.GetValueOrDefault<JObject>("Event")["metadataVersion"].ToString())</value>
</set-header>
<set-header name="X-Event-Topic" exists-action="override">
<value>@(context.Variables.GetValueOrDefault<JObject>("Event")["topic"].ToString())</value>
</set-header>
<set-body>@(context.Variables.GetValueOrDefault<JObject>("Event")["data"].ToString())</set-body>
</otherwise>
</choose>
Независимо от того, для чего я установил конечную точку веб-хука или что я ввел во входящую политику, я я получаю следующую ошибку, когда нажимаю «Создать» в подписке на событие:
Deploying Event Subscription: productupdate
Deployment has failed with the following error: {"code":"Url
validation","message":"The attempt to validate the provided endpoint
https://<apim>.azure-api.net/OrdersService/v1/Products failed. For more details,
visit https://aka.ms/esvalidation."}
Я нашел много информации об ошибке, но ничего определенного, что относится к (или работает с) получению APIM Я почти уверен, что это связано с возвратом кода проверки, но я не могу понять, как заставить APIM делать это. Что я пропускаю или делаю неправильно?