У меня есть обработчик сообщений веб-API MyHandler
, который я хочу запустить в конвейере OWIN в качестве промежуточного программного обеспечения. Итак, настройте обработчик следующим образом.
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);
}
}
Обработчик очень простой и ничего не делает.
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;
}
}
Я поставил точку останова внутри SendAsync
, и он сломался, но следующие base.SendAsync
молча взрываются, и я вижу A first chance exception of type 'System.InvalidOperationException' occurred in System.Net.Http.dll
.
Я могу довольно легко добавить MyHandler
к config.MessageHandlers
, и он будет отлично работать в конвейере веб-API, но это не то, что я хочу делать. Я хочу запустить MyHandler
в конвейере OWIN. Это вообще возможно? Так должно быть. В противном случае, я думаю, нет смысла иметь метод расширения UseHttpMessageHandler
. Просто я не мог придумать, как делать то, что я хочу делать.