Exemple #1
0
        private static void LogHandlers(RuntimePipeline pipeline)
        {
            var handlers = pipeline.EnumerateHandlers().ToList();

            Console.WriteLine("Handlers for pipeline, count = {0}", handlers.Count);
            for (int i = 0; i < handlers.Count; i++)
            {
                var handler = handlers[i];
                Console.WriteLine("Handler {0}: {1}", i, handler.GetType().FullName);
            }
        }
        /// <inheritdoc />
        protected sealed override void CustomizeRuntimePipeline(RuntimePipeline pipeline)
        {
            if (pipeline is null)
            {
                throw new ArgumentNullException(nameof(pipeline));
            }

            base.CustomizeRuntimePipeline(pipeline);

            var httpHandlerOpenGenericType = typeof(HttpHandler <>);

            foreach (var pipelineHandler in pipeline.EnumerateHandlers())
            {
                bool doBreak = false;
                for (
                    Type handlerType = pipelineHandler.GetType();
                    !(handlerType is null) && handlerType != typeof(object);
                    handlerType = GetBaseType(handlerType)
                    )
                {
                    var handlerTypeInfo = GetTypeInfo(handlerType);
                    if (handlerTypeInfo.IsGenericType && handlerTypeInfo.GetGenericTypeDefinition() == httpHandlerOpenGenericType)
                    {
                        var nonHttpHandler = new NonHttpHandler()
                        {
                            OuterHandler = pipelineHandler.OuterHandler,
                            InnerHandler = pipelineHandler,
                            Logger       = pipelineHandler.Logger
                        };

                        pipelineHandler.OuterHandler.InnerHandler = nonHttpHandler;
                        pipelineHandler.OuterHandler = nonHttpHandler;

                        doBreak = true;
                        break;
                    }
                }
                if (doBreak)
                {
                    break;
                }
            }
        }