Ich habe eine Web-API-Nachrichtenhandler MyHandler
, die ich in OWIN-Pipeline als Middleware ausführen möchte. Konfigurieren Sie den Handler so.Konvertieren von HttpRequestMessage zu OwinRequest und OwinResponse zu 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);
}
}
Handler ist sehr einfach und tut nichts.
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;
}
}
Ich habe einen Bruchstelle innerhalb SendAsync
und es bricht aber die folgende base.SendAsync
Bomben still, und ich sehe A first chance exception of type 'System.InvalidOperationException' occurred in System.Net.Http.dll
.
Ich kann ganz einfach hinzufügen MyHandler
zu config.MessageHandlers
und es wird perfekt in der Web-API-Pipeline laufen, aber das ist nicht das, was ich tun möchte. Ich möchte MyHandler
in der OWIN-Pipeline ausführen. Ist das überhaupt möglich? Es sollte sein. Sonst hat es keinen Sinn, die Erweiterungsmethode UseHttpMessageHandler
zu verwenden, denke ich. Nur dass ich keinen Weg finden konnte, das zu tun, was ich tun wollte.
Ich denke, Sie verwirren die Konzepte von Message-Handlern und delegieren Handler. Ein Message-Handler ist nur etwas, das eine Anfrage entgegennimmt und eine Antwort zurückgibt. –
Ich verstehe den Unterschied zwischen Message-Handler und einem delegierenden Handler. Ein delegierender Handler ist ein Message-Handler und ich hatte nur gehofft, dass ich einen delegierenden Handler anstelle eines Message-Handlers verwenden kann und magisch in der OWIN-Pipeline laufen wird, so wie er in einer Web-API-Pipeline läuft und anscheinend nicht möglich ist basierend auf Kirans Antwort. Ich stimme zu, ich bin zu ehrgeizig. Danke, dass du meine Frage angeschaut hast. – Badri