public void ShouldEnable_ReturnsExpectedValue() { IOptions <HttpOptions> optionsWrapper = null; var scriptHostManagerMock = new Mock <IScriptHostManager>(MockBehavior.Strict); var hostServiceProviderMock = scriptHostManagerMock.As <IServiceProvider>(); hostServiceProviderMock.Setup(p => p.GetService(typeof(IOptions <HttpOptions>))).Returns(() => optionsWrapper); var rootServiceProvider = new Mock <IServiceProvider>(MockBehavior.Strict); rootServiceProvider.Setup(p => p.GetService(typeof(IScriptHostManager))).Returns(scriptHostManagerMock.Object); Assert.False(HttpThrottleMiddleware.ShouldEnable(null)); Assert.False(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object)); var httpOptions = new HttpOptions(); optionsWrapper = new OptionsWrapper <HttpOptions>(httpOptions); Assert.False(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object)); httpOptions.MaxConcurrentRequests = 5; Assert.True(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object)); httpOptions.MaxConcurrentRequests = -1; httpOptions.DynamicThrottlesEnabled = true; Assert.True(HttpThrottleMiddleware.ShouldEnable(rootServiceProvider.Object)); }
public static IApplicationBuilder UseWebJobsScriptHost(this IApplicationBuilder builder, IApplicationLifetime applicationLifetime, Action <WebJobsRouteBuilder> routes) { IEnvironment environment = builder.ApplicationServices.GetService <IEnvironment>() ?? SystemEnvironment.Instance; IOptionsMonitor <StandbyOptions> standbyOptions = builder.ApplicationServices.GetService <IOptionsMonitor <StandbyOptions> >(); IOptionsMonitor <HttpBodyControlOptions> httpBodyControlOptions = builder.ApplicationServices.GetService <IOptionsMonitor <HttpBodyControlOptions> >(); IServiceProvider serviceProvider = builder.ApplicationServices; builder.UseMiddleware <HttpRequestBodySizeMiddleware>(); builder.UseMiddleware <SystemTraceMiddleware>(); builder.UseMiddleware <HostnameFixupMiddleware>(); if (environment.IsLinuxConsumption()) { builder.UseMiddleware <EnvironmentReadyCheckMiddleware>(); } if (standbyOptions.CurrentValue.InStandbyMode) { builder.UseMiddleware <PlaceholderSpecializationMiddleware>(); } // Specialization can change the CompatMode setting, so this must run later than // the PlaceholderSpecializationMiddleware builder.UseWhen(context => httpBodyControlOptions.CurrentValue.AllowSynchronousIO || context.Request.IsAdminDownloadRequest(), config => { config.UseMiddleware <AllowSynchronousIOMiddleware>(); }); // This middleware must be registered before we establish the request service provider. builder.UseWhen(context => !context.Request.IsAdminRequest(), config => { config.UseMiddleware <HostAvailabilityCheckMiddleware>(); }); builder.UseWhen(context => HostWarmupMiddleware.IsWarmUpRequest(context.Request, standbyOptions.CurrentValue.InStandbyMode, environment), config => { config.UseMiddleware <HostWarmupMiddleware>(); }); // This middleware must be registered before any other middleware depending on // JobHost/ScriptHost scoped services. builder.UseMiddleware <ScriptHostRequestServiceProviderMiddleware>(); if (environment.IsLinuxConsumption()) { builder.UseMiddleware <AppServiceHeaderFixupMiddleware>(); } builder.UseMiddleware <ExceptionMiddleware>(); builder.UseWhen(HomepageMiddleware.IsHomepageRequest, config => { config.UseMiddleware <HomepageMiddleware>(); }); builder.UseWhen(context => !context.Request.IsAdminRequest() && HttpThrottleMiddleware.ShouldEnable(serviceProvider), config => { config.UseMiddleware <HttpThrottleMiddleware>(); }); builder.UseMiddleware <JobHostPipelineMiddleware>(); builder.UseMiddleware <FunctionInvocationMiddleware>(); // Register /admin/vfs, and /admin/zip to the VirtualFileSystem middleware. builder.UseWhen(VirtualFileSystemMiddleware.IsVirtualFileSystemRequest, config => config.UseMiddleware <VirtualFileSystemMiddleware>()); // MVC routes (routes defined by Controllers like HostController, FunctionsController, ... must be added before functions/proxy routes so they are matched first and can not be overridden by functions or proxy routes) // source here: https://github.com/aspnet/Mvc/blob/master/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs builder.UseMvc(); // Ensure the HTTP binding routing is registered after all middleware builder.UseHttpBindingRouting(applicationLifetime, routes); return(builder); }
public static IApplicationBuilder UseWebJobsScriptHost(this IApplicationBuilder builder, IApplicationLifetime applicationLifetime, Action <WebJobsRouteBuilder> routes) { IEnvironment environment = builder.ApplicationServices.GetService <IEnvironment>() ?? SystemEnvironment.Instance; IOptionsMonitor <StandbyOptions> standbyOptions = builder.ApplicationServices.GetService <IOptionsMonitor <StandbyOptions> >(); IOptionsMonitor <HttpBodyControlOptions> httpBodyControlOptions = builder.ApplicationServices.GetService <IOptionsMonitor <HttpBodyControlOptions> >(); IOptionsMonitor <HttpOptions> httpOptions = builder.ApplicationServices.GetService <IOptionsMonitor <HttpOptions> >(); builder.UseMiddleware <SystemTraceMiddleware>(); builder.UseMiddleware <HostnameFixupMiddleware>(); if (environment.IsLinuxConsumption()) { builder.UseMiddleware <EnvironmentReadyCheckMiddleware>(); } if (standbyOptions.CurrentValue.InStandbyMode) { builder.UseMiddleware <PlaceholderSpecializationMiddleware>(); } // Specialization can change the CompatMode setting, so this must run later than // the PlaceholderSpecializationMiddleware builder.UseWhen(context => httpBodyControlOptions.CurrentValue.AllowSynchronousIO || context.Request.IsAdminDownloadRequest(), config => { config.UseMiddleware <AllowSynchronousIOMiddleware>(); }); // This middleware must be registered before we establish the request service provider. builder.UseWhen(context => !context.Request.IsAdminRequest(), config => { config.UseMiddleware <HostAvailabilityCheckMiddleware>(); }); builder.UseWhen(context => HostWarmupMiddleware.IsWarmUpRequest(context.Request, standbyOptions.CurrentValue.InStandbyMode, environment), config => { config.UseMiddleware <HostWarmupMiddleware>(); }); // This middleware must be registered before any other middleware depending on // JobHost/ScriptHost scoped services. builder.UseMiddleware <ScriptHostRequestServiceProviderMiddleware>(); if (environment.IsLinuxConsumption()) { builder.UseMiddleware <AppServiceHeaderFixupMiddleware>(); } builder.UseMiddleware <ExceptionMiddleware>(); builder.UseWhen(HomepageMiddleware.IsHomepageRequest, config => { config.UseMiddleware <HomepageMiddleware>(); }); builder.UseWhen(context => HttpThrottleMiddleware.ShouldEnable(httpOptions.CurrentValue) && !context.Request.IsAdminRequest(), config => { config.UseMiddleware <HttpThrottleMiddleware>(); }); builder.UseMiddleware <ResponseContextItemsCheckMiddleware>(); builder.UseMiddleware <JobHostPipelineMiddleware>(); builder.UseMiddleware <FunctionInvocationMiddleware>(); // Register /admin/vfs, and /admin/zip to the VirtualFileSystem middleware. builder.UseWhen(VirtualFileSystemMiddleware.IsVirtualFileSystemRequest, config => config.UseMiddleware <VirtualFileSystemMiddleware>()); // Ensure the HTTP binding routing is registered after all middleware builder.UseHttpBindingRouting(applicationLifetime, routes); builder.UseMvc(); return(builder); }