Кажется, что эти два имеют аналогичную цель. Было бы здорово увидеть некоторые примеры, когда нужно использовать один за другим, за и против, а также указать, каковы основные отличия.Когда использовать HttpMessageHandler против ActionFilter?
ответ
Главное отличие их двух заключается в их сосредоточении. Сообщение Обработчики применяются ко всем HTTP-запросам. Они выполняют функцию HTTP-посредника. Фильтры применяются только к запросам , отправленным на конкретный контроллер/действие, где применяется фильтр .
Вы должны использовать MessageHandlers, если хотите, чтобы поведение было , примененное к подавляющему большинству запросов. Фильтры должны использоваться, когда они применимы только к определенным ресурсам.
также могут применяться ко всем HTTP-запросам, если они добавлены в качестве глобальных фильтров. – frennky
Где это? –
http://blogs.msdn.com/b/kiranchalla/archive/2012/05/05/asp-net-mvc4-web-api-stack-diagram.aspx –
Большая разница между обработчиками и фильтров действий является этапом, на котором они выполняются. Фильтры действий выполняются после того, как произошла диспетчеризация диспетчера и привязка модели, поэтому у вас есть возможность взаимодействовать с экземпляром контроллера, который обрабатывает запрос, а также имеет прямой доступ к типизированным объектам модели, которые передаются методу действия. Я использовал этот подход для выполнения расширенного ведения журнала значений запроса/ответа - потому что я мог получить доступ к контроллеру, я смог записать дополнительную информацию о том, как обрабатывался запрос.
обработчики сообщений выполняются в начале процесса, и работают намного ближе к значениям сырья запроса/ответа, чем фильтры (сопоставьте HttpRequestMessage/HttpResponseMessage объектов, используемые в обработчиках с гораздо более богатым HttpActionContext и HttpActionExecutedContext объектов доступны в пределах фильтров). Это делает их потенциально более эффективными для некоторых видов деятельности, например, если вы пытаетесь определить, нужно ли раньше разорвать запрос. Если вы знаете, что запрос должен быть отклонен, обработчик позволит вам это сделать до того, как инфраструктура WebApi попытается создать экземпляр контроллера, выполнить привязку модели и т. Д.
Другое отличие состоит в том, что обработчики связаны цепью, и у вас больше контроля над тем, как выполняется цепочка. Хотя фильтры вызываются последовательно, установка ответа в одном из фильтров эффективно завершает запрос, предотвращая выполнение следующего фильтра в списке. Например, если у вас есть первый фильтр, который возвращает неверный запрос, если ваша модель равна нулю, а второй - для регистрации запроса, ваш второй фильтр не будет выполняться после того, как первый запрос будет сгенерирован плохим запросом. С помощью обработчика все равно можно (хотя и не обязательно целесообразно!) Вызывать внутренний обработчик и позволять цепочке обработчиков работать нормально.
- 1. HttpMessageHandler против DelegatingHandler
- 2. Autofac - DelegatingHandler (HttpMessageHandler) Регистрация
- 3. MapHttpRoute с пользовательским HttpMessageHandler
- 4. Когда использовать LinkedListNode против LinkedList
- 5. Когда использовать TaskEx.Run против TaskEx.RunEx
- 6. Когда использовать UITouch против UIScroll
- 7. Когда использовать Backbone.View против Backbone.Marionette.ItemView?
- 8. Когда использовать FormGroup против FormArray?
- 9. Когда использовать коллекцию против осколков?
- 10. когда использовать na.omit против complete.cases
- 11. ссылка против компиляции? Когда использовать?
- 12. Когда использовать NSInteger против int
- 13. Когда использовать CouchDB против RDBMS
- 14. SOA против MVC - когда использовать
- 15. Когда использовать грани против присоединения
- 16. Когда использовать ViewStub против Inflate?
- 17. Когда использовать Html.BeginForm против Ajax.BeginForm
- 18. HttpMessageHandler с MapHttpAttributeRoutes не работает
- 19. Определить тип ActionResult в ActionFilter?
- 20. Storm - DRPC против транзакции против Trident - Когда использовать что?
- 21. Когда использовать свойства против уловщиков и сеттеров
- 22. Когда использовать new.instancemethod против назначения метода классу
- 23. Когда использовать событие домена против двойной отправки
- 24. ООП, защищенный против общественности. Когда использовать?
- 25. Когда использовать AWS Lambda против SWF
- 26. КОГДА использовать сериализацию против обычного POST
- 27. Когда использовать AppCompatView против обычного Android-вида
- 28. Когда использовать прядильщик против объекта формы
- 29. Когда использовать формы django против ручных форм?
- 30. Когда использовать Spring Integration против Camel?
http://forums.asp.net/t/1804456.aspx – user960567
Лучше может быть вопрос, когда использовать HttpMessageHandler против * global * ActionFilter. Это кажется немного более туманным. Фильтры –