2016-10-27 7 views
0

私はASP.NET Webhooksパッケージを使用して、アプリケーションで特定のイベントが発生したときにコールバックを受信できるようにしています。例: entityUpdated、entityCreated、entityDeletedエンティティごとのWebhooks

特定のエンティティのコールバックを受信することにのみ関心がある場合に備えて、Webhooksを特定のエンティティの更新のみに登録する可能性を公開したいと思います。例: entity1のentityUpdated

フィルタは、この動作を実装するための良い候補のようです。ユーザーはフィルタを使用してイベントを購読できます。例: エンティティ*(エンティティに関するすべてのイベントを受け取る)

エンティティごとのイベントを公開することを考えていました:entity_1_Updated。 これは、公開されたイベントのリストが、アプリケーションの実行時に変更されることを意味します(エンティティが作成または削除されると)。 具体的には、IWebHookFilterProviderの実装は、イベントが発生する可能性のあるエンティティのリストを取得するためのデータベースクエリを実行します。 ように:

class EntityWebHookFilterProvider : IWebHookFilterProvider 
{ 
    public async Task<Collection<WebHookFilter>> GetFiltersAsync() 
    { 
     List<int> ids = await repository.GetAllUpdatableEntitiesAsync(); 
     return new Collection<WebHookFilter>(ids.Select(id => new WebHookFilter { Name = string.Format("entity_{0}_Updated", id)}).ToList()); 
    } 
} 

これは良い解決策でしょうか?または、イベント/フィルタのリストを修正する必要がありますか?

答えて

1

簡単な方法は、登録時にWebHook登録のプロパティ部分を使用して加入者が興味を持っている特定のIDを示すために別のフィールドを使用することです。

// Create an event with action 'event1' and additional data 
await this.NotifyAsync("event1", new { P1 = "p1" }, (w, s) => 
{ 
    // Check that the property included in the event data matches that 
    // of the WebHook registration. 
    return true; 
}); 
:あなたは、サーバー側で通知を送信する際

次に、あなたがウェブフックが唯一のIDは、例えば、ウェブフック登録のものと一致したときに生成されていることをフィルタリングするためにあなたを可能にするのFuncを受け取るオーバーロードを使用することができます

希望します。

Henrik

関連する問題