Example #1
0
        private static void AddStaticFiles(SeedBuilder builder)
        {
            builder.Configure((app, routes, serviceProvider) =>
            {
                var env = serviceProvider.GetRequiredService <IHostingEnvironment>();

                IFileProvider fileProvider;
                // 开发环境下需要直接读取模块目录下的文件
                if (env.IsDevelopment())
                {
                    var fileProviders = new List <IFileProvider>
                    {
                        new ModuleProjectStaticFileProvider(env),
                        new ModuleEmbeddedStaticFileProvider(env)
                    };
                    fileProvider = new CompositeFileProvider(fileProviders);
                }
                else
                {
                    fileProvider = new ModuleEmbeddedStaticFileProvider(env);
                }

                app.UseStaticFiles(new StaticFileOptions
                {
                    RequestPath  = "",
                    FileProvider = fileProvider
                });
            });
        }
Example #2
0
        /// <summary>
        /// Adds tenant level configuration to serve static files from modules
        /// </summary>
        private static void AddStaticFiles(OrchardCoreBuilder builder)
        {
            builder.Configure((app, routes, serviceProvider) =>
            {
                var env        = serviceProvider.GetRequiredService <IHostingEnvironment>();
                var appContext = serviceProvider.GetRequiredService <IApplicationContext>();

                IFileProvider fileProvider;
                if (env.IsDevelopment())
                {
                    var fileProviders = new List <IFileProvider>();
                    fileProviders.Add(new ModuleProjectStaticFileProvider(appContext));
                    fileProviders.Add(new ModuleEmbeddedStaticFileProvider(appContext));
                    fileProvider = new CompositeFileProvider(fileProviders);
                }
                else
                {
                    fileProvider = new ModuleEmbeddedStaticFileProvider(appContext);
                }

                var options = serviceProvider.GetRequiredService <IOptions <StaticFileOptions> >().Value;

                options.RequestPath  = "";
                options.FileProvider = fileProvider;
                app.UseStaticFiles(options);
            });
        }
Example #3
0
        /// <summary>
        /// Adds tenant level configuration to serve static files from modules
        /// </summary>
        private static void AddStaticFiles(BlocksCoreBuilder builder)
        {
            builder.Configure((app, routes, serviceProvider) =>
            {
                var env        = serviceProvider.GetRequiredService <IHostingEnvironment>();
                var appContext = serviceProvider.GetRequiredService <IApplicationContext>();

                IFileProvider fileProvider;
                if (env.IsDevelopment())
                {
                    var fileProviders = new List <IFileProvider>();
                    fileProviders.Add(new ModuleProjectStaticFileProvider(appContext));
                    fileProviders.Add(new ModuleEmbeddedStaticFileProvider(appContext));
                    fileProvider = new CompositeFileProvider(fileProviders);
                }
                else
                {
                    fileProvider = new ModuleEmbeddedStaticFileProvider(appContext);
                }

                var options = serviceProvider.GetRequiredService <IOptions <StaticFileOptions> >().Value;

                options.RequestPath  = "";
                options.FileProvider = fileProvider;

                // Cache static files for a year as they are coming from embedded resources and should not vary
                options.OnPrepareResponse = ctx =>
                {
                    ctx.Context.Response.Headers[HeaderNames.CacheControl] = "max-age=" + (int)TimeSpan.FromDays(365).TotalSeconds;
                };

                app.UseStaticFiles(options);
            });
        }
Example #4
0
        public static IApplicationBuilder UseStaticFilesModules(this IApplicationBuilder app)
        {
            var env = app.ApplicationServices.GetRequiredService <IHostingEnvironment>();

            IFileProvider fileProvider;

            if (env.IsDevelopment())
            {
                var fileProviders = new List <IFileProvider>();
                fileProviders.Add(new ModuleProjectStaticFileProvider(env));
                fileProviders.Add(new ModuleEmbeddedStaticFileProvider(env));
                fileProvider = new CompositeFileProvider(fileProviders);
            }
            else
            {
                fileProvider = new ModuleEmbeddedStaticFileProvider(env);
            }

            app.UseStaticFiles(new StaticFileOptions
            {
                RequestPath  = "",
                FileProvider = fileProvider
            });

            return(app);
        }
Example #5
0
        /// <summary>
        /// Adds tenant level configuration to serve static files from modules
        /// </summary>
        private static void AddStaticFiles(OrchardCoreBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                services.AddSingleton <IModuleStaticFileProvider>(serviceProvider =>
                {
                    var env        = serviceProvider.GetRequiredService <IHostEnvironment>();
                    var appContext = serviceProvider.GetRequiredService <IApplicationContext>();

                    IModuleStaticFileProvider fileProvider;
                    if (env.IsDevelopment())
                    {
                        var fileProviders = new List <IStaticFileProvider>
                        {
                            new ModuleProjectStaticFileProvider(appContext),
                            new ModuleEmbeddedStaticFileProvider(appContext)
                        };
                        fileProvider = new ModuleCompositeStaticFileProvider(fileProviders);
                    }
                    else
                    {
                        fileProvider = new ModuleEmbeddedStaticFileProvider(appContext);
                    }
                    return(fileProvider);
                });

                services.AddSingleton <IStaticFileProvider>(serviceProvider =>
                {
                    return(serviceProvider.GetRequiredService <IModuleStaticFileProvider>());
                });
            });

            builder.Configure((app, routes, serviceProvider) =>
            {
                var fileProvider = serviceProvider.GetRequiredService <IModuleStaticFileProvider>();

                var options = serviceProvider.GetRequiredService <IOptions <StaticFileOptions> >().Value;

                options.RequestPath  = "";
                options.FileProvider = fileProvider;

                var shellConfiguration = serviceProvider.GetRequiredService <IShellConfiguration>();

                var cacheControl = shellConfiguration.GetValue("StaticFileOptions:CacheControl", "public, max-age=2592000, s-max-age=31557600");

                // Cache static files for a year as they are coming from embedded resources and should not vary
                options.OnPrepareResponse = ctx =>
                {
                    ctx.Context.Response.Headers[HeaderNames.CacheControl] = cacheControl;
                };

                app.UseStaticFiles(options);
            });
        }
        /// <summary>
        /// Adds tenant level configuration to serve static files from modules
        /// </summary>
        private static void AddStaticFiles(OrchardCoreBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                services.AddSingleton <IModuleStaticFileProvider>(serviceProvider =>
                {
                    var env        = serviceProvider.GetRequiredService <IHostEnvironment>();
                    var appContext = serviceProvider.GetRequiredService <IApplicationContext>();

                    IModuleStaticFileProvider fileProvider;
                    if (env.IsDevelopment())
                    {
                        var fileProviders = new List <IStaticFileProvider>
                        {
                            new ModuleProjectStaticFileProvider(appContext),
                            new ModuleEmbeddedStaticFileProvider(appContext)
                        };
                        fileProvider = new ModuleCompositeStaticFileProvider(fileProviders);
                    }
                    else
                    {
                        fileProvider = new ModuleEmbeddedStaticFileProvider(appContext);
                    }
                    return(fileProvider);
                });

                services.AddSingleton <IStaticFileProvider>(serviceProvider =>
                {
                    return(serviceProvider.GetRequiredService <IModuleStaticFileProvider>());
                });
            });

            builder.Configure((app, routes, serviceProvider) =>
            {
                var fileProvider = serviceProvider.GetRequiredService <IModuleStaticFileProvider>();

                var shellConfiguration = serviceProvider.GetRequiredService <IShellConfiguration>();
                // Cache static files for a year as they are coming from embedded resources and should not vary.
                var cacheControl = shellConfiguration.GetValue("StaticFileOptions:CacheControl", $"public, max-age={TimeSpan.FromDays(30).TotalSeconds}, s-maxage={TimeSpan.FromDays(365.25).TotalSeconds}");

                // Use the current options values but without mutating the resolved instance.
                var options = serviceProvider.GetRequiredService <IOptions <StaticFileOptions> >().Value;
                options     = new StaticFileOptions
                {
                    RequestPath  = String.Empty,
                    FileProvider = fileProvider,
                    RedirectToAppendTrailingSlash = options.RedirectToAppendTrailingSlash,
                    ContentTypeProvider           = options.ContentTypeProvider,
                    DefaultContentType            = options.DefaultContentType,
                    ServeUnknownFileTypes         = options.ServeUnknownFileTypes,
                    HttpsCompression = options.HttpsCompression,

                    OnPrepareResponse = ctx =>
                    {
                        ctx.Context.Response.Headers[HeaderNames.CacheControl] = cacheControl;
                    },
                };

                app.UseStaticFiles(options);
            });
        }