예제 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QueryValidation"/> class.
        /// </summary>
        /// <param name="pipelineFactory">The middleware pipeline factory.</param>
        public QueryValidation(IMiddlewarePipelineFactory pipelineFactory)
        {
            // Note: You could simply new-up a MiddlewarePipeline instance here and build it,
            // but this example uses a pipeline factory so you can share pipelines between
            // Azure Functions that have common requirements, without having to duplicate
            // code.

            this.pipeline = pipelineFactory.CreateForQuery <QueryValidationQueryParameters>(this.ExecuteAsync);
        }
        /// <summary>
        /// Conditionally creates a branch in the request pipeline that is rejoined to the main pipeline.
        /// </summary>
        /// <param name="pipeline">The pipeline.</param>
        /// <param name="condition">The function which is invoked to determine if the branch should be taken.</param>
        /// <param name="configure">Configures the branch.</param>
        /// <returns>The pipeline instance.</returns>
        public static IMiddlewarePipeline UseWhen(
            this IMiddlewarePipeline pipeline,
            Func <HttpContext, bool> condition,
            Action <IMiddlewarePipeline> configure)
        {
            var middleware = new ConditionalMiddleware(pipeline, condition, configure, true);

            return(pipeline.Use(middleware));
        }
 /// <summary>
 /// Adds body payload validation middleware to the pipeline.
 /// </summary>
 /// <typeparam name="T">The body model type.</typeparam>
 /// <param name="pipeline">The pipeline.</param>
 /// <param name="handleValidationFailure">Optional handler to return a custom response when validation is unsuccessful.</param>
 /// <returns>The pipeline instance.</returns>
 public static IMiddlewarePipeline UseBodyValidation <T>(
     this IMiddlewarePipeline pipeline,
     Func <HttpContext, ModelValidationResult, IActionResult> handleValidationFailure = null)
     where T : new()
 {
     return(pipeline.Use(new BodyModelValidationMiddleware <T>()
     {
         HandleValidationFailure = handleValidationFailure
     }));
 }
예제 #4
0
        public void UsePipeline(IMiddlewarePipeline pipeline)
        {
            AssertNotDisposed();

            if (Pipeline != null)
            {
                throw new InvalidOperationException("Pipeline can only be set once.");
            }

            Pipeline = pipeline;
        }
예제 #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BodyValidation"/> class.
        /// </summary>
        /// <param name="pipelineFactory">The middleware pipeline factory.</param>
        public BodyValidationWithCustomResponse(IMiddlewarePipelineFactory pipelineFactory)
        {
            // Note: You could simply new-up a MiddlewarePipeline instance here and build it,
            // but this example uses a pipeline factory so you can share pipelines between
            // Azure Functions that have common requirements, without having to duplicate
            // code.

            this.pipeline = pipelineFactory.CreateForBody <BodyValidationBody>(
                this.ExecuteAsync,
                ResponseHelper.HandleValidationFailure);
        }
예제 #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ConditionalMiddleware"/> class.
 /// </summary>
 /// <param name="pipeline">The pipeline.</param>
 /// <param name="condition">The condition to evaluate.</param>
 /// <param name="configure">Configures the branch.</param>
 /// <param name="rejoinPipeline">Determines if the branch should rejoin the main pipeline or not.</param>
 public ConditionalMiddleware(
     IMiddlewarePipeline pipeline,
     Func <HttpContext, bool> condition,
     Action <IMiddlewarePipeline> configure,
     bool rejoinPipeline)
 {
     this.pipeline       = pipeline;
     this.configure      = configure;
     this.condition      = condition;
     this.rejoinPipeline = rejoinPipeline;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="MiddlewareFactory"/> class.
        /// </summary>
        /// <param name="httpContextAccessor">The HTTP context accessor.</param>
        /// <param name="middlewareA">Middleware A</param>
        /// <param name="middlewareB">Middleware B</param>
        public MiddlewarePipelineFactory(
            IHttpContextAccessor httpContextAccessor,
            ILogger <MiddlewarePipelineFactory> logger,
            HttprequestHeaderMiddleware middleware)
        {
            this.httpContextAccessor = httpContextAccessor;
            this.middleware          = middleware;

            // CREATE PIPELINE ONCE PER FUNCTION CLASS
            this.pipeline = this.Create(ExecuteFunction1Async);

            logger.LogInformation("logging MiddlewarePipelineFactory ....");
        }
예제 #8
0
 public static IMiddlewarePipeline Add(this IMiddlewarePipeline pipeline, NextDelegate method)
 {
     if (pipeline == null)
     {
         throw new ArgumentNullException(nameof(pipeline));
     }
     if (method == null)
     {
         throw new ArgumentNullException(nameof(method));
     }
     pipeline.AddLast(new DelegateMiddleware(method));
     return(pipeline);
 }
        /// <summary>
        /// Adds exception handling middleware to the pipeline.
        /// </summary>
        /// <param name="pipeline">The pipeline.</param>
        /// <param name="exceptionHandler">An optional handler to process exceptions.  Leave null to use the default exception handler.</param>
        /// <param name="loggerHandler">An optional handler to log exceptions.</param>
        /// <returns>The pipeline instance.</returns>
        public static IMiddlewarePipeline UseExceptionHandling(
            this IMiddlewarePipeline pipeline,
            Func <Exception, HttpContext, Task <IActionResult> > exceptionHandler = null,
            Func <Exception, Task> loggerHandler = null)
        {
            var middleware = new ExceptionHandlerMiddleware()
            {
                ExceptionHandler  = exceptionHandler ?? ExceptionHandlerMiddleware.DefaultExceptionHandler,
                LogExceptionAsync = loggerHandler,
            };

            return(pipeline.Use(middleware));
        }
예제 #10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConditionalMiddleware"/> class.
        /// </summary>
        /// <param name="pipeline">The pipeline. Required.</param>
        /// <param name="condition">The condition to evaluate. Required.</param>
        /// <param name="configure">Configures the branch. Optional.</param>
        /// <param name="rejoinPipeline">Determines if the branch should rejoin the main pipeline or not.</param>
        public ConditionalMiddleware(
            IMiddlewarePipeline pipeline,
            Func <HttpContext, bool> condition,
            Action <IMiddlewarePipeline> configure,
            bool rejoinPipeline)
        {
            GuardClauses.IsNotNull(nameof(pipeline), pipeline);
            GuardClauses.IsNotNull(nameof(condition), condition);

            this.pipeline       = pipeline;
            this.configure      = configure;
            this.condition      = condition;
            this.rejoinPipeline = rejoinPipeline;
        }
예제 #11
0
        public static IMiddlewarePipeline AddMvc(this IMiddlewarePipeline pipeline, IRouter router)
        {
            if (pipeline == null)
            {
                throw new ArgumentNullException(nameof(pipeline));
            }
            if (router == null)
            {
                throw new ArgumentNullException(nameof(router));
            }
            var middleware = new MvcMiddleware(router);

            pipeline.AddLast(middleware);
            return(pipeline);
        }
예제 #12
0
        public static IMiddlewarePipeline AddMvc(this IMiddlewarePipeline pipeline, IServiceProvider provider)
        {
            if (pipeline == null)
            {
                throw new ArgumentNullException(nameof(pipeline));
            }
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }
            var router     = provider.GetService <IRouter>();
            var middleware = new MvcMiddleware(router);

            pipeline.AddLast(middleware);
            return(pipeline);
        }
예제 #13
0
 protected override void ConfigurePipeline(IMiddlewarePipeline pipeline, IServiceProvider services)
 {
     pipeline.AddMvc(services);
 }
예제 #14
0
 internal SockConnection(Socket socket, IMiddlewarePipeline pipeline)
 {
     UsePipeline(pipeline);
     Socket = socket;
 }
 /// <summary>
 /// Adds an Azure Function middleware to the pipeline.
 /// </summary>
 /// <param name="pipeline">The pipeline.</param>
 /// <param name="func">The function to add.</param>
 /// <returns>The pipeline instance.</returns>
 public static IMiddlewarePipeline Use(this IMiddlewarePipeline pipeline, Func <HttpContext, Task <IActionResult> > func)
 {
     return(pipeline.Use(new FunctionMiddleware(func)));
 }
예제 #16
0
 protected virtual void ConfigurePipeline(IMiddlewarePipeline pipeline, IServiceProvider services)
 {
 }
 /// <summary>
 /// Adds body payload validation middleware to the pipeline.
 /// </summary>
 /// <typeparam name="T">The body model type.</typeparam>
 /// <param name="pipeline">The pipeline.</param>
 /// <returns>The pipeline instance.</returns>
 public static IMiddlewarePipeline UseBodyValidation <T>(this IMiddlewarePipeline pipeline)
     where T : new()
 {
     return(pipeline.Use(new BodyModelValidationMiddleware <T>()));
 }
 /// <summary>
 /// Adds correlation ID middleware to the pipeline.
 /// </summary>
 /// <param name="pipeline">The pipeline.</param>
 /// <param name="correlationIdHeaders">The colleciton of request headers that contain the correlation ID.  The first match is used.</param>
 /// <returns>The pipeline instance.</returns>
 public static IMiddlewarePipeline UseCorrelationId(this IMiddlewarePipeline pipeline, IEnumerable <string> correlationIdHeaders)
 {
     return(pipeline.Use(new CorrelationIdMiddleware(correlationIdHeaders)));
 }
 /// <summary>
 /// Adds a request delegate middleware to the pipeline.
 /// </summary>
 /// <param name="pipeline">The pipeline.</param>
 /// <param name="requestDelegate">The request delegate to add.</param>
 /// <returns>The pipeline instance.</returns>
 public static IMiddlewarePipeline Use(this IMiddlewarePipeline pipeline, RequestDelegate requestDelegate)
 {
     return(pipeline.Use(new RequestDelegateMiddleware(requestDelegate)));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="BodyValidation"/> class.
 /// </summary>
 /// <param name="pipelineFactory">The middleware pipeline factory.</param>
 public ExceptionHandler(IMiddlewarePipelineFactory pipelineFactory)
 {
     this.pipeline = pipelineFactory.Create(this.ExecuteAsync);
 }