public void Configuration(IAppBuilder appBuilder)
        {
            var config = new HttpConfiguration();

            config.Filters.Clear();
            config.SuppressDefaultHostAuthentication();

            // Start debug pipeline
            DebugMiddlewareOptions options = new DebugMiddlewareOptions
            {
                BeforeHandler = (ctx) => DebugMiddleware.Log("New Request"),
                AfterHandler  = (ctx) => DebugMiddleware.Log("End Request\r\n****************************")
            };

            appBuilder.Use <DebugMiddleware>(options);

            appBuilder.Use <DebugMiddleware>(new DebugMiddlewareOptions
            {
                BeforeHandler = (ctx) => DebugMiddleware.Log("Before Auth")
            });

            // Create some dummy Identity
            appBuilder.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AccessTokenFormat  = new TokenFormatter(),
                AuthenticationType = "DummyAuth",
                Provider           = new OAuthBearerAuthenticationProvider
                {
                    OnValidateIdentity = async(ctx) => ctx.Validated(ctx.Ticket),
                    OnRequestToken     = async(ctx) => ctx.Token = "111"
                }
            });


            appBuilder.Use <DebugMiddleware>(new DebugMiddlewareOptions
            {
                BeforeHandler = (ctx) => DebugMiddleware.Log("After Auth")
            });


            // Add WebApi
            appBuilder.Use <DebugMiddleware>(new DebugMiddlewareOptions
            {
                BeforeHandler = (ctx) => DebugMiddleware.Log("Before WebApi")
            });
            config.MapHttpAttributeRoutes();
            appBuilder.UseWebApi(config);
            appBuilder.Use <DebugMiddleware>(new DebugMiddlewareOptions
            {
                BeforeHandler = (ctx) => DebugMiddleware.Log("After WebApi")
            });

            // Add a Handler which will always return something
            appBuilder.Use <DebugMiddleware>(new DebugMiddlewareOptions
            {
                BeforeHandler = (ctx) => DebugMiddleware.Log("Before Universal Handler")
            });
            appBuilder.Use(async(context, next) =>
            {
                await context.Response.WriteAsync("Universal Handler!");
                await next.Invoke();
            });
            appBuilder.Use <DebugMiddleware>(new DebugMiddlewareOptions
            {
                BeforeHandler = (ctx) => DebugMiddleware.Log("After Universal Handler")
            });

            config.EnsureInitialized();
        }
 public DebugMiddleware(OwinMiddleware next, DebugMiddlewareOptions options) : base(next)
 {
     _options = options;
 }