2013-09-06 23 views
6

Số DelegatingHandler được kế thừa từ HttpMessageHandler. Nhưng, tôi không hiểu sự khác biệt, cho rằng bạn phải thực hiện cùng một phương pháp, SendAsync để thực hiện cả hai công việc.HttpMessageHandler vs DelegatingHandler

Sự khác biệt giữa hai Trình xử lý này là gì? Khi nào tôi nên sử dụng mỗi cái?

Trả lời

14

Nếu bạn đã quen thuộc với ASP.NET, thì một sự tương tự tốt sẽ là các trình xử lý và mô-đun HTTP. Nếu bạn triển khai một HttpMessageHandler, bạn triển khai các phương thức SendSendAsync và trả lại phản hồi hoặc lời hứa về phản hồi. Điều này tương tự như trình xử lý Http. Nếu bạn triển khai DelegatingHandler và thêm nó vào bộ sưu tập config.MessageHandlers, lớp của bạn sẽ chạy trong đường dẫn và có cơ hội để xem và phản ứng với yêu cầu và phản hồi, giống như mô-đun HTTP. DelegatingHandler cũng là HttpMessageHandler ngoại trừ việc thực hiện SendAsync, nó chỉ gọi số SendAsync của trình xử lý bên trong. Người xử lý bên trong sẽ làm như vậy và bạn sẽ nhận được các hộp Trung Quốc hoặc hiệu ứng búp bê Nga. HttpServer, trong đó đường ống bắt đầu là chính nó là DelegatingHandler.

+0

Có ai biết làm thế nào để cấu hình xử lý tin nhắn trong web.config – Gurpreet

0

Sự khác biệt là rất tinh tế. @Badri đã cho bạn một lời giải thích nhanh chóng.

Nhìn at this poster, bạn nhận ra nó là gì. Hãy ghi nhớ rằng khi bạn tạo DelegatingHandlers của riêng bạn, bạn không gây rối xung quanh với bất cứ thứ gì không phải là thứ cụ thể của HTTP. Đó không phải là nơi để chơi với BODY trong trường hợp POST. ví dụ.

Một điều hữu ích bạn có thể làm là phát hiện rất sớm trong đường ống mà mã thông báo không có trong tiêu đề, sau đó bạn có thể chấm dứt ngay và yêu cầu và tạo phản hồi StatusCode.Forbidden. Tất nhiên, có thể một trang web đơn giản không cần nó. Chỉ là một overkill. Nhưng nếu bạn nhận được hàng triệu cuộc gọi một phút, nó sẽ rất tiện dụng vì nó xảy ra ngay trước khi bộ điều khiển thực sự được khởi tạo.

Chỉ có một vài trường hợp bạn thực sự cần điều đó. Hoặc nói rằng khách hàng thực hiện cuộc gọi còn lại, chỉ có thể thực hiện GET và POST nhưng trong tiêu đề, nó chỉ định phương thức X-Method-Override = PUT, sau đó bạn có thể sửa đổi phương thức yêu cầu từ POST thành PUT, để điều khiển của bạn/người điều phối hành động tạo ra đúng cá thể và gọi hành động đúng.

Đây là áp phích thú vị. IN IT: D

http://www.asp.net/media/4071077/aspnet-web-api-poster.pdf

Các vấn đề liên quan