我有一个 Web 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);
}
}
Handler 非常简单,什么也不做。
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
,它会在 Web API 管道中完美运行,但这不是我想要做的。我想MyHandler
在 OWIN 管道中运行。这可能吗?它应该是。UseHttpMessageHandler
否则,我猜,有扩展方法没有意义。只是我想不出一种方法来做我想做的事。