Microsoft.Owin, a.k.a. Katana, provides a number of very useful abstractions for working with OWIN. These types are optional but greatly ease the construction of applications and middleware, especially security middleware. The Katana team did a great job of ensuring their implementations work well with
Microsoft.Owin as well as the standard OWIN
MidFunc described below. However, not all third-party middleware implementations followed the conventions set forth in the Katana team’s implementations. To be fair, OWIN only standardized the middleware signature earlier this year, and the spec is still a work in progress.
At some point in the last year, I discovered the
HttpMessageHandlerAdapter was not, in fact, OWIN compliant. I learned from the Web API team they would not be able to fix the problem without introducing breaking changes, so I came up with an adapter that should work with most implementations based on
OwinMiddleware that didn’t expose the OWIN
The solution is rather simple, and the Katana source code provides one of the necessary pieces in its
AppFuncTransition class. The adapter wraps the
OwinMiddleware-based implementation and exposes the OWIN
MidFunc signature. After creating the adapter specifically for
HttpMessageHandlerAdapter, I created a generic version I think should work for any
OwinMiddleware. (Examples in both C# and F#.)
I hope that helps someone else. If there’s interest, I can package this up and place it on NuGet, though it seems a lot of effort for something so small. The source code above is released under the Apache 2 license, in keeping with the use of
AppFuncTransition used above from the Katana source.