Không, bởi vì trình xử lý tin nhắn hoạt động trên số HttpRequestMessage
hoặc raw HttpResponseMessage
(trong trường hợp tiếp tục). Vì vậy, thực sự, không có khái niệm về "bộ điều khiển hiện tại đang thực hiện" với DelegatingHandlers
vì trình xử lý tin nhắn sẽ được gọi trước khi gửi yêu cầu đến bộ điều khiển hoặc (một lần nữa, trong trường hợp tiếp tục) sau khi bộ điều khiển trả về phản hồi.
Tuy nhiên, nó thực sự phụ thuộc vào những gì bạn đang cố gắng làm.
Nếu bạn muốn biết bộ điều khiển nào yêu cầu sẽ được định tuyến, bạn có thể gọi thủ công cơ chế chọn nội bộ bộ điều khiển.
public class MyHandler : DelegatingHandler
{
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
var config = GlobalConfiguration.Configuration;
var controllerSelector = new DefaultHttpControllerSelector(config);
// descriptor here will contain information about the controller to which the request will be routed. If it's null (i.e. controller not found), it will throw an exception
var descriptor = controllerSelector.SelectController(request);
// continue
return base.SendAsync(request, cancellationToken);
}
}
Nguồn
2012-10-20 01:56:33
Cảm ơn, tôi có quy trình xác thực và sẽ rất tốt để kiểm tra loại bộ điều khiển để xem liệu thuộc tính tùy chỉnh có được xác định hay không, vì vậy tôi có thể tránh thói quen xác thực này. Điều này sẽ làm cho điều đó có thể. –
tuyệt vời. có bạn có thể dễ dàng làm điều đó một khi bạn lấy một thể hiện của HttpControllerDescriptor –
@ FilipW là có một cách 'tốt đẹp' để làm điều này mà không có nó ném một ngoại lệ? trong mã nguồn cuộc gọi đến 'SelectController' cuối cùng gọi' this._controllerInfoCache.Value.TryGetValue (controllerName, out controllerDescriptor) 'tuy nhiên' _controllerInfoCache' không thể truy cập công khai theo bất kỳ cách nào – wal