Việc bạn có thể làm là sử dụng trình xử lý tin nhắn trên mỗi tuyến đường nhưng hãy cẩn thận tại đây. Theo bài viết mà @Nick được liên kết trong câu trả lời của mình, bạn có thể xử lý chuỗi và đảm bảo rằng HttpControllerDispatcher
có liên quan. Nếu không, bạn sẽ không nhận được vào đường ống điều khiển.
Một lựa chọn khác mà tôi thích là sử dụng HttpControllerDispatcher
như một lớp cơ sở cho trình xử lý tuỳ chỉnh của bạn:
public class CustomerOrdersDispatcher : HttpControllerDispatcher {
public CustomerOrdersDispatcher(HttpConfiguration config)
: base(config) {
}
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken) {
// Do some stuff here...
return base.SendAsync(request, cancellationToken);
}
}
Ở đây, làm thế nào bạn sẽ đăng ký nó:
protected void Application_Start(object sender, EventArgs e) {
var config = GlobalConfiguration.Configuration;
config.Routes.MapHttpRoute(
name: "CustomerOrdersHttpRoute",
routeTemplate: "api/customers/{customerKey}/orders/{key}",
defaults: new { controller = "CustomerOrders", key = RouteParameter.Optional },
constraints: null,
handler: new CustomerOrdersDispatcher(config)
);
config.MessageHandlers.Add(new SomeOtherHandler1());
config.MessageHandlers.Add(new SomeOtherHandler2());
}
Sau SomeOtherHandler1
và SomeOtherHandler2
được thực thi, CustomerOrdersDispatcher
của bạn sẽ được thực thi cho CustomerOrdersHttpRoute tuyến. Vì vậy, bạn có thể thấy rằng bạn giữ lại hành vi xử lý mặc định và thiết lập một số trình xử lý toàn cục trong khi bạn cũng có một trình xử lý cụ thể.
Dưới đây là việc triển khai đầy đủ CustomerOrdersDispatcher
: https://github.com/tugberkugurlu/AdvancedWebAPI/blob/master/PerRouteMHOwnershipSample/Dispatcher/CustomerOrdersDispatcher.cs của tôi.
Bạn có thể xem mã nguồn ứng dụng đầy đủ mẫu cũng như để xem làm thế nào nó hoạt động ra: https://github.com/tugberkugurlu/AdvancedWebAPI/tree/master/PerRouteMHOwnershipSample
Cảm ơn Link, nó thực sự tự giải thích. – user1135534
@ kiran-challa và Nick, Làm cách nào để làm việc tương tự với "Định tuyến thuộc tính"? Thậm chí có thể không? –
liên kết chết trong câu cuối cùng –