Tôi có trình xử lý tin nhắn API web MyHandler
mà tôi muốn chạy trong đường ống OWIN làm phần mềm trung gian. Vì vậy, cấu hình trình xử lý như thế này.Chuyển đổi HttpRequestMessage thành OwinRequest và OwinResponse thành HttpResponseMessage
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseHttpMessageHandler(new MyHandler());
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"DefaultWebApi",
"{controller}/{id}",
new { id = RouteParameter.Optional });
app.UseWebApi(config);
}
}
Trình xử lý rất đơn giản và không làm gì cả.
public class MyHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{ // <--- breakpoint here
var response = await base.SendAsync(request, cancellationToken);
return response;
}
}
tôi đặt một điểm break trong SendAsync
và nó phá vỡ nhưng sau base.SendAsync
bom âm thầm và tôi thấy A first chance exception of type 'System.InvalidOperationException' occurred in System.Net.Http.dll
.
Tôi có thể dễ dàng thêm MyHandler
vào config.MessageHandlers
và nó sẽ chạy hoàn hảo trong đường dẫn API Web nhưng đó không phải là những gì tôi muốn làm. Tôi muốn chạy MyHandler
trong đường ống OWIN. cái này nó có hoàn toàn có thể xảy ra được không? Nó nên được. Nếu không, không có điểm nào trong việc có phương pháp mở rộng UseHttpMessageHandler
, tôi đoán vậy. Chỉ là tôi không thể tìm ra cách để làm những gì tôi muốn làm.
Tôi nghĩ rằng bạn đang bối rối các khái niệm về xử lý tin nhắn và xử lý ủy nhiệm. Trình xử lý tin nhắn chỉ là một thứ yêu cầu và trả về một câu trả lời. –
Tôi hiểu sự khác biệt giữa trình xử lý tin nhắn và trình xử lý ủy nhiệm. Một trình xử lý ủy nhiệm là một trình xử lý tin nhắn và tôi chỉ hy vọng rằng tôi có thể sử dụng một trình xử lý ủy nhiệm thay cho trình xử lý tin nhắn và nó sẽ chạy trong đường ống OWIN như nó chạy trong một đường dẫn API Web và dường như không thể , dựa trên câu trả lời của Kiran. Tôi đồng ý tôi quá tham vọng. Cảm ơn bạn đã xem câu hỏi của tôi. – Badri