/ / ActionAttributeFilter vs. Delegatinghandler - zalety / wady? - asp.net-web-api2

ActionAttributeFilter vs. Delegatinghandler - zalety / wady? - asp.net-web-api2

Chcę zareagować na przychodzące dane json z żądania i wychodzące json w odpowiedzi.

Po przeszukaniu zauważyłem, że można użyć zarówno dostosowanego ActionAttributeFilter, jak i DelegatingHandler. Czy są jakieś zalety / wady?

Odpowiedzi:

12 dla odpowiedzi № 1

Zalety / wady zależą od potrzeb.

Delegowanie obsługi jest znacznie wyższe w hierarchiiPrzetwarzanie żądań Web API niż ActionAttributeFilter. Jeśli zaimplementujesz Delegating Handler, tworzysz moduł obsługi komunikatów, natomiast jeśli utworzysz filtr akcji, tworzysz filtr, który działa tuż przed metodą akcji w potoku.

Chociaż obsługa komunikatów działa wcześniej wrurociąg, może to być korzystne w kontaktach wnioski przy najbliższej możliwej okazji. Obsługa komunikatów działa dla wszystkich metod działania lub przynajmniej wszystkich metod działania trasy. Należy to wziąć pod uwagę przy wyborze obsługi komunikatów w celu rozwiązania problemu. Filtry akcji mogą być stosowane do poszczególnych metod działania, wszystkich metod w kontrolerze lub wszystkich metod we wszystkich kontrolerach według konfigurowanie filtra jako filtru globalnego.


2 dla odpowiedzi nr 2

Dla twojego konkretnego wymogu, tj. Żądania logowania i odpowiedzi, powinieneś skorzystać z obsługi delegowania.

Zaletą tego jest możliwość utworzenia dziennikaobiekt z żądania ORAZ odpowiedź w tym samym czasie. Dzieje się tak, ponieważ delegujący program obsługi działa wokół żądania i odpowiedzi, więc będzie miał dostęp do obu.

protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var log = new Log { Url = request.RequestUri };
var response = await base.SendAsync(request, cancellationToken);
log.ContentLength = response.ContentLength;
this.LogAsync(log);
return response;
}

Za pomocą ActionFilter możesz mieć metody, które będą wykonywane przed AND po żądaniu, ale nie w całym, więc będziesz musiał zastanowić się nad korelacją dzienników.