0

Azure Event Grid と Webhook は初めてです。

.net mvc Web API アプリケーションを Microsoft Azure Event Grid にバインドするにはどうすればよいですか?

つまり、新しいファイルが BLOB ストレージに追加されるたびに、Azure Event Grid が Web API アプリケーションに通知する必要があります。

次の記事を試しましたが、うまくいきません https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-event-quickstart

4

4 に答える 4

3

.net mvc Web API アプリケーションを Microsoft Azure Event Grid にバインドするにはどうすればよいですか? つまり、新しいファイルが BLOB ストレージに追加されるたびに、Azure Event Grid が Web API アプリケーションに通知する必要があります。

そのためのデモを行います。私の側では正しく動作します。次の手順を参照できます。

1.機能だけでデモRestAPIプロジェクトを作成する

 public string Post([FromBody] object value) //Post
 {
      return $"value:{value}";
 }

2.Azure ストレージを Azure Event Grid と統合する場合は、場所West US2またはWest Central USにBLOB ストレージ アカウントを作成する必要があります。詳細については、スクリーン ショットを参照してください。

ここに画像の説明を入力

2.ストレージ アカウントタイプのイベント サブスクリプションを作成し、カスタム API エンドポイントをバインドします。

ここに画像の説明を入力

ここに画像の説明を入力

3. BLOB を BLOB ストレージにアップロードし、Rest API から確認します。

ここに画像の説明を入力

于 2017-11-07T07:30:08.183 に答える
0

以下は、Web API でそれを処理する方法の最新のサンプルです。ここから作業サンプルを確認してデプロイすることもできます: https://github.com/dbarcol/azure-event-grid-viewer

    [HttpPost]
    public async Task<IActionResult> Post()
    {
        using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
        {
            var jsonContent = await reader.ReadToEndAsync();

            // Check the event type.
            // Return the validation code if it's 
            // a subscription validation request. 
            if (EventTypeSubcriptionValidation)
            {
                var gridEvent =
                    JsonConvert.DeserializeObject<List<GridEvent<Dictionary<string, string>>>>(jsonContent)
                        .First();


                // Retrieve the validation code and echo back.
                var validationCode = gridEvent.Data["validationCode"];
                return new JsonResult(new{ 
                    validationResponse = validationCode
                });
            }
            else if (EventTypeNotification)
            {
                // Do more here...
                return Ok();                 
            }
            else
            {
                return BadRequest();
            }
        }

    }

public class GridEvent<T> where T: class
{
    public string Id { get; set;}
    public string EventType { get; set;}
    public string Subject {get; set;}
    public DateTime EventTime { get; set; } 
    public T Data { get; set; } 
    public string Topic { get; set; }
}
于 2018-05-24T16:26:30.707 に答える
0

Microsoft.Azure.EventGrid nuget パッケージを使用することもできます。

次の記事から (gldraphael のクレジット): https://gldraphael.com/blog/creating-an-azure-eventgrid-webhook-in-asp-net-core/

[Route("/api/webhooks"), AllowAnonymous]
public class WebhooksController : Controller
{
    // POST: /api/webhooks/handle_ams_jobchanged
    [HttpPost("handle_ams_jobchanged")] // <-- Must be an HTTP POST action
    public IActionResult ProcessAMSEvent(
        [FromBody]EventGridEvent[] ev, // 1. Bind the request
        [FromServices]ILogger<WebhooksController> logger)
    {
        var amsEvent = ev.FirstOrDefault(); // TODO: handle all of them!
        if(amsEvent == null) return BadRequest();

        // 2. Check the eventType field
        if (amsEvent.EventType == EventTypes.MediaJobStateChangeEvent)
        {
            // 3. Cast the data to the expected type
            var data = (amsEvent.Data as JObject).ToObject<MediaJobStateChangeEventData>();

            // TODO: do your thing; eg:
            logger.LogInformation(JsonConvert.SerializeObject(data, Formatting.Indented));
        }

        // 4. Respond with a SubscriptionValidationResponse to complete the 
        // event subscription handshake.
        if(amsEvent.EventType == EventTypes.EventGridSubscriptionValidationEvent)
        {
            var data = (amsEvent.Data as JObject).ToObject<SubscriptionValidationEventData>();
            var response = new SubscriptionValidationResponse(data.ValidationCode);
            return Ok(response);
        }
        return BadRequest();
    }
}

于 2019-03-05T15:48:31.297 に答える