【发布时间】:2013-07-13 10:12:24
【问题描述】:
我有一个 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 管道中完美运行,但这不是我想要做的。我想在 OWIN 管道中运行 MyHandler。这有可能吗?它应该是。否则,我猜,扩展方法UseHttpMessageHandler 毫无意义。只是我想不出一种方法来做我想做的事。
【问题讨论】:
-
我认为您混淆了消息处理程序和委托处理程序的概念。消息处理程序只是接受请求并返回响应的东西。
-
我明白消息处理程序和委托处理程序之间的区别。委托处理程序是一个消息处理程序,我只是希望我能够使用委托处理程序代替消息处理程序,并且神奇地它将在 OWIN 管道中运行,就像它在 Web API 管道中运行一样,显然这是不可能的,基于基兰的回复。我同意我野心太大。感谢您查看我的问题。
标签: c# asp.net-web-api owin katana