Esempio n. 1
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);
            });
        }