コード例 #1
0
        public LoggerMiddlewate(CustomRequestDelegate next, ICustomLogger log, IOptions <LogOptions> options)
        {
            _next = next;
            _log  = log;

            _logOptions = options.Value;
        }
コード例 #2
0
        public ResponderMiddleware(CustomRequestDelegate next, ICustomLogger log)
        {
            _next = next;

            _responder = new HttpResponser();

            _log = log;
        }
コード例 #3
0
        public CustomRequestDelegate Build()
        {
            CustomRequestDelegate app = context =>
            {
                context.HttpContext.Response.StatusCode = 404;
                return(Task.CompletedTask);
            };

            foreach (var component in _middlewares.Reverse())
            {
                app = component(app);
            }

            return(app);
        }
コード例 #4
0
 public AuthorizationMiddleware(CustomRequestDelegate next)
 {
     _next = next;
 }
コード例 #5
0
 public RouteFinderMiddleware(CustomRequestDelegate next)
 {
     _next = next;
 }
コード例 #6
0
        public static IPipelineBuilder UseMiddleware(this IPipelineBuilder app, Type middleware, params object[] args)
        {
            return(app.Use(next =>
            {
                var methods = middleware.GetMethods(BindingFlags.Instance | BindingFlags.Public);
                var invokeMethods = methods.Where(m =>
                                                  string.Equals(m.Name, InvokeMethodName, StringComparison.Ordinal) ||
                                                  string.Equals(m.Name, InvokeAsyncMethodName, StringComparison.Ordinal)
                                                  ).ToArray();

                if (invokeMethods.Length > 1)
                {
                    throw new InvalidOperationException();
                }

                if (invokeMethods.Length == 0)
                {
                    throw new InvalidOperationException();
                }

                var methodinfo = invokeMethods[0];
                if (!typeof(Task).IsAssignableFrom(methodinfo.ReturnType))
                {
                    throw new InvalidOperationException();
                }

                var parameters = methodinfo.GetParameters();
                if (parameters.Length == 0 || parameters[0].ParameterType != typeof(DownstreamContext))
                {
                    throw new InvalidOperationException();
                }

                var ctorArgs = new object[args.Length + 1];
                ctorArgs[0] = next;
                Array.Copy(args, 0, ctorArgs, 1, args.Length);
                var instance = ActivatorUtilities.CreateInstance(app.ApplicationServices, middleware, ctorArgs);
                if (parameters.Length == 1)
                {
                    var ocelotDelegate = (CustomRequestDelegate)methodinfo.CreateDelegate(typeof(CustomRequestDelegate), instance);
                    var diagnosticListener = (DiagnosticListener)app.ApplicationServices.GetService(typeof(DiagnosticListener));
                    var middlewareName = ocelotDelegate.Target.GetType().Name;

                    CustomRequestDelegate wrapped = context =>
                    {
                        try
                        {
                            Write(diagnosticListener, "Ocelot.MiddlewareStarted", middlewareName, context);
                            return ocelotDelegate(context);
                        }
                        catch (Exception ex)
                        {
                            WriteException(diagnosticListener, ex, "Ocelot.MiddlewareException", middlewareName, context);
                            throw ex;
                        }
                        finally
                        {
                            Write(diagnosticListener, "Ocelot.MiddlewareFinished", middlewareName, context);
                        }
                    };

                    return wrapped;
                }

                var factory = Compile <object>(methodinfo, parameters);

                return context =>
                {
                    var serviceProvider = context.HttpContext.RequestServices ?? app.ApplicationServices;
                    if (serviceProvider == null)
                    {
                        throw new InvalidOperationException();
                    }

                    return factory(instance, context, serviceProvider);
                };
            }));
        }
コード例 #7
0
        public RequesterMiddleware(CustomRequestDelegate next)
        {
            _next = next;

            _httpClient = new HttpClientExtension();
        }