/ / ActionAttributeFilter vs. Delegatinghandler - vantaggi / svantaggi? - asp.net-web-api2

ActionAttributeFilter vs. Delegatinghandler - vantaggi / svantaggi? - asp.net-web-api2

Voglio registrare i dati JSON in arrivo da richiesta e JSON in uscita in risposta.

Dopo alcune ricerche ho notato che sia possibile utilizzare ActionAttributeFilter e DelegatingHandler personalizzati. Sono alcuni vantaggi / svantaggi?

risposte:

12 per risposta № 1

Vantaggi / svantaggi dipende dalle tue necessità.

Il delegato del gestore è molto più alto nella gerarchia diElaborazione delle richieste API Web rispetto ad ActionAttributeFilter. Se si implementa Delegating Handler, si sta creando un gestore di messaggi, mentre se si crea il filtro di azione, si sta creando un filtro eseguito poco prima del metodo di azione nella pipeline.

Sebbene un gestore di messaggi venga eseguito in precedenza nel filegasdotto, può essere vantaggioso nel trattare richieste alla prima opportunità disponibile. Il gestore messaggi viene eseguito per tutti i metodi di azione, o almeno tutti i metodi di azione di una rotta. Questo dovrebbe essere considerato quando si seleziona il gestore di messaggi per risolvere un problema. I filtri azione possono essere applicati a singoli metodi di azione, a tutti i metodi in un controller oa tutti i metodi in tutti i controller configurazione del filtro come filtro globale.


2 per risposta № 2

Per il tuo particolare requisito, ad esempio la richiesta di registrazione e la risposta, dovresti utilizzare un gestore delegante.

Il vantaggio di questo è che puoi creare un registrooggetto dalla richiesta E la risposta allo stesso tempo. Ciò è dovuto al fatto che il gestore delegante esegue la richiesta e la risposta e quindi avrà accesso a entrambi.

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;
}

Con ActionFilter puoi avere metodi che verranno eseguiti prima e dopo la richiesta, ma non dappertutto, quindi dovrai pensare a correlare i registri in qualche modo.