Sembra che questi due abbiano uno scopo simile. Sarebbe bello vedere alcuni esempi quando utilizzare l'uno sull'altro, pro e contro, oltre a sottolineare quali sono le principali differenze.Quando utilizzare HttpMessageHandler vs ActionFilter?
risposta
La principale differenza tra i due è la messa a fuoco. Messaggio I gestori sono applicati a tutte le richieste HTTP. Eseguono la funzione di un intermediario HTTP. I filtri si applicano solo alle richieste che sono inviate al particolare controller/azione in cui è applicato il filtro .
È necessario utilizzare MessageHandlers quando si desidera che il comportamento sia applicato alla maggior parte delle richieste. I filtri devono essere utilizzati quando sono applicabili solo a determinate risorse.
possono anche essere applicati a tutte le richieste HTTP, se aggiunti come filtri globali. – frennky
Da dove viene questo? –
http://blogs.msdn.com/b/kiranchalla/archive/2012/05/05/asp-net-mvc4-web-api-stack-diagram.aspx –
Una grande differenza tra gestori e filtri azione è la fase in cui vengono eseguiti. I filtri di azione vengono eseguiti dopo l'invio del controller e l'associazione del modello, pertanto è possibile interagire con l'istanza del controller che gestisce la richiesta e avere accesso diretto agli oggetti del modello tipizzati che vengono passati al metodo di azione. Ho utilizzato questo approccio per eseguire la registrazione avanzata dei valori di richiesta/risposta: poiché sono riuscito ad accedere al controller, sono stato in grado di registrare informazioni aggiuntive su come è stata gestita la richiesta.
gestori di messaggi vengono eseguite in precedenza nel processo, e funzionano molto più vicino ai valori richiesta greggio/risposta di filtri (contrastare gli oggetti HttpRequestMessage/HttpResponseMessage utilizzati nei gestori con la tanto ricco HttpActionContext e HttpActionExecutedContext oggetti disponibili all'interno di filtri). Ciò li rende potenzialmente più efficienti per alcune attività, ad esempio, se si sta tentando di determinare se è necessario interrompere anticipatamente la richiesta. Se sai che la richiesta deve essere rifiutata, un gestore ti consentirà di farlo prima che l'infrastruttura WebApi si sia impegnata a creare un'istanza del controller, eseguendo il binding del modello ecc.
Un'altra differenza è che i gestori sono concatenati e che hai più controllo su come viene eseguita la catena. Sebbene i filtri vengano richiamati in sequenza, l'impostazione della risposta in un filtro terminerà effettivamente la richiesta, impedendo l'esecuzione del successivo filtro nell'elenco. Ad esempio, se si dispone di un primo filtro che restituisce una richiesta errata se il modello è nullo e un secondo filtro per registrare la richiesta, il secondo filtro non verrà eseguito una volta generata la cattiva richiesta dal primo filtro. Con un gestore, sarebbe comunque possibile (anche se non necessariamente consigliabile!) Chiamare il gestore interno e consentire alla catena di gestione di operare normalmente.
- 1. HttpMessageHandler vs DelegatingHandler
- 2. Quando utilizzare node.js vs sinatra vs rails?
- 3. Quando utilizzare ReleaseComObject vs FinalReleaseComObject?
- 4. StopWatch vs Timer - Quando utilizzare
- 5. Quando utilizzare strtr vs str_replace?
- 6. Quando utilizzare EntityManager.find() vs EntityManager.getReference()
- 7. Quando utilizzare TaskEx.Run vs. TaskEx.RunEx
- 8. Quando utilizzare SQLITE_TRANSIENT vs SQLITE_STATIC?
- 9. Quando utilizzare ServiceTracker vs ServiceReference
- 10. Quando utilizzare Pipe vs Quando utilizzare la memoria condivisa
- 11. Come implementare HttpMessageHandler nell'API Web?
- 12. Android: quando utilizzare Service vs Singleton?
- 13. https vs ssl- quando utilizzare cosa
- 14. jQuery syntax - quando utilizzare $ (dollaro) vs jQuery
- 15. QUANDO utilizzare serialize vs solo POST regolare
- 16. Quando utilizzare remote vs ipcRenderer, ipcMain
- 17. Cetriolo: Quando utilizzare tag/ganci vs sfondi
- 18. Quando utilizzare Dependency injection vs service locator
- 19. EventBus vs Callbacks, da utilizzare quando?
- 20. JTable.clearSelection() vs Jtable.getSelectionModel.clearSelection() - Quando utilizzare cosa?
- 21. Qt5 QML, quando utilizzare ColumnLayout vs Column?
- 22. Quando utilizzare Android PopupWindow vs Dialog
- 23. Quando utilizzare Spring @ConfigurationCondition vs @Condition?
- 24. Quando utilizzare un Backbone.View vs. Backbone.Marionette.ItemView?
- 25. Quando utilizzare dequeueReusableCellWithIdentifier vs dequeueReusableCellWithIdentifier: forIndexPath
- 26. Quando utilizzare ModelAndView vs Model in primavera?
- 27. Quando utilizzare evento dominio vs doppia spedizione
- 28. Layout Android - quando utilizzare l'app: vs Android :?
- 29. Quando utilizzare Cassandra vs. Solr in DSE?
- 30. Quando utilizzare $ stderr vs STDERR in Ruby?
http://forums.asp.net/t/1804456.aspx – user960567
Una domanda migliore potrebbe essere quando utilizzare HttpMessageHandler vs un ActionFilter * globale *. Sembra un po 'più confuso. I filtri –