示例#1
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/error/500");
                app.UseHsts();
            }
            // Do not write telemetry to debug output
            TelemetryDebugWriter.IsTracingDisabled = true;

            app.UseResponseCaching();

            app.UseResponseCompression();

            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseAuthentication();
            // WorkContextBuildMiddleware must  always be registered first in  the Middleware chain
            app.UseMiddleware <WorkContextBuildMiddleware>();
            app.UseMiddleware <StoreMaintenanceMiddleware>();
            app.UseMiddleware <NoLiquidThemeMiddleware>();
            app.UseMiddleware <CreateStorefrontRolesMiddleware>();
            app.UseMiddleware <ApiErrorHandlingMiddleware>();

            var mvcJsonOptions = app.ApplicationServices.GetService <IOptions <MvcJsonOptions> >().Value;

            mvcJsonOptions.SerializerSettings.Converters.Add(new CartTypesJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new MoneyJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new CurrencyJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new OrderTypesJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new RecommendationJsonConverter(app.ApplicationServices.GetService <IRecommendationProviderFactory>()));

            var mvcViewOptions = app.ApplicationServices.GetService <IOptions <MvcViewOptions> >().Value;

            mvcViewOptions.ViewEngines.Add(app.ApplicationServices.GetService <ILiquidViewEngine>());

            // Do not use status code pages for Api requests
            app.UseWhen(context => !context.Request.Path.IsApi(), appBuilder =>
            {
                appBuilder.UseStatusCodePagesWithReExecute("/error/{0}");
            });

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger(c => c.RouteTemplate = "docs/{documentName}/docs.json");

            var rewriteOptions = new RewriteOptions();

            // Load IIS url rewrite rules from external file
            if (File.Exists("IISUrlRewrite.xml"))
            {
                using (var iisUrlRewriteStreamReader = File.OpenText("IISUrlRewrite.xml"))
                {
                    rewriteOptions.AddIISUrlRewrite(iisUrlRewriteStreamReader);
                }
            }

            rewriteOptions.Add(new StorefrontUrlNormalizeRule());

            var requireHttpsOptions = new RequireHttpsOptions();

            Configuration.GetSection("VirtoCommerce:RequireHttps").Bind(requireHttpsOptions);
            if (requireHttpsOptions.Enabled)
            {
                rewriteOptions.AddRedirectToHttps(requireHttpsOptions.StatusCode, requireHttpsOptions.Port);
            }
            app.UseRewriter(rewriteOptions);
            // Enable browser XSS protection
            app.Use(async(context, next) =>
            {
                context.Response.Headers["X-Xss-Protection"] = "1";
                await next();
            });
            app.UseMvc(routes =>
            {
                routes.MapSlugRoute("{*path}", defaults: new { controller = "Home", action = "Index" });
            });
        }
示例#2
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/error/500");
                app.UseHsts();
            }
            //Do not write telemetry to debug output
            TelemetryDebugWriter.IsTracingDisabled = true;

            app.UseResponseCaching();

            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseAuthentication();
            //WorkContextBuildMiddleware must  always be registered first in  the Middleware chain
            app.UseMiddleware <WorkContextBuildMiddleware>();
            app.UseMiddleware <StoreMaintenanceMiddleware>();
            app.UseMiddleware <NoLiquidThemeMiddleware>();
            app.UseMiddleware <CreateStorefrontRolesMiddleware>();
            app.UseMiddleware <ApiErrorHandlingMiddleware>();


            app.UseStatusCodePagesWithReExecute("/error/{0}");

            var rewriteOptions = new RewriteOptions();

            //Load IIS url rewrite rules from external file
            if (File.Exists("IISUrlRewrite.xml"))
            {
                using (var iisUrlRewriteStreamReader = File.OpenText("IISUrlRewrite.xml"))
                {
                    rewriteOptions.AddIISUrlRewrite(iisUrlRewriteStreamReader);
                }
            }
            rewriteOptions.Add(new StorefrontUrlNormalizeRule());

            var requireHttpsOptions = new RequireHttpsOptions();

            Configuration.GetSection("VirtoCommerce:RequireHttps").Bind(requireHttpsOptions);
            if (requireHttpsOptions.Enabled)
            {
                rewriteOptions.AddRedirectToHttps(requireHttpsOptions.StatusCode, requireHttpsOptions.Port);
            }
            app.UseRewriter(rewriteOptions);
            //Enable browser XSS protection
            app.Use(async(context, next) =>
            {
                context.Response.Headers["X-Xss-Protection"] = "1";
                await next();
            });
            app.UseMvc(routes =>
            {
                routes.MapSlugRoute("{*path}", defaults: new { controller = "Home", action = "Index" });
            });
        }
示例#3
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/error/500");
                app.UseHsts();
            }
            // Do not write telemetry to debug output
            TelemetryDebugWriter.IsTracingDisabled = true;

            app.UseResponseCaching();

            app.UseResponseCompression();

            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseRouting();

            app.UseAuthentication();
            // WorkContextBuildMiddleware must  always be registered first in  the Middleware chain
            app.UseMiddleware <WorkContextBuildMiddleware>();
            app.UseMiddleware <StoreMaintenanceMiddleware>();
            app.UseMiddleware <NoLiquidThemeMiddleware>();
            app.UseMiddleware <CreateStorefrontRolesMiddleware>();
            app.UseMiddleware <ApiErrorHandlingMiddleware>();

            var mvcJsonOptions = app.ApplicationServices.GetService <IOptions <MvcNewtonsoftJsonOptions> >().Value;

            mvcJsonOptions.SerializerSettings.Converters.Add(new CartTypesJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new MoneyJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new CurrencyJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new OrderTypesJsonConverter(app.ApplicationServices.GetService <IWorkContextAccessor>()));
            mvcJsonOptions.SerializerSettings.Converters.Add(new RecommendationJsonConverter(app.ApplicationServices.GetService <IRecommendationProviderFactory>()));

            var mvcViewOptions = app.ApplicationServices.GetService <IOptions <MvcViewOptions> >().Value;

            mvcViewOptions.ViewEngines.Add(app.ApplicationServices.GetService <ILiquidViewEngine>());

            // Do not use status code pages for Api requests
            app.UseWhen(context => !context.Request.Path.IsApi(), appBuilder =>
            {
                appBuilder.UseStatusCodePagesWithReExecute("/error/{0}");
            });

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger(c => c.RouteTemplate = "docs/{documentName}/docs.json");

            var swaggerOptions = app.ApplicationServices.GetService <IOptions <SwaggerOptions> >().Value;

            if (swaggerOptions.UI.Enable)
            {
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint($"./{SwaggerDocName}/docs.json", SwaggerDocName);
                    c.RoutePrefix = "docs";
                    c.EnableValidator();
                    c.IndexStream = () =>
                    {
                        var type = typeof(Startup).GetTypeInfo().Assembly
                                   .GetManifestResourceStream("VirtoCommerce.Storefront.wwwroot.swagger.index.html");
                        return(type);
                    };
                    c.DocumentTitle = "VirtoCommerce Storefront REST API documentation";
                    c.InjectStylesheet("/swagger/vc.css");
                    c.ShowExtensions();
                    c.DocExpansion(DocExpansion.None);
                    c.DefaultModelsExpandDepth(-1);
                });
            }

            var rewriteOptions = new RewriteOptions();

            // Load IIS url rewrite rules from external file
            if (File.Exists("IISUrlRewrite.xml"))
            {
                using (var iisUrlRewriteStreamReader = File.OpenText("IISUrlRewrite.xml"))
                {
                    rewriteOptions.AddIISUrlRewrite(iisUrlRewriteStreamReader);
                }
            }

            rewriteOptions.Add(new StorefrontUrlNormalizeRule());

            var requireHttpsOptions = new RequireHttpsOptions();

            Configuration.GetSection("VirtoCommerce:RequireHttps").Bind(requireHttpsOptions);
            if (requireHttpsOptions.Enabled)
            {
                rewriteOptions.AddRedirectToHttps(requireHttpsOptions.StatusCode, requireHttpsOptions.Port);
            }
            app.UseRewriter(rewriteOptions);
            // Enable browser XSS protection
            app.Use(async(context, next) =>
            {
                context.Response.Headers["X-Xss-Protection"] = "1";
                await next();
            });


            // It will be good to rewrite endpoint routing as described here, but it's not easy to do:
            // https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#routing-startup-code

            app.UseMvc(routes =>
            {
                routes.MapSlugRoute("{*path}", defaults: new { controller = "Home", action = "Index" });
            });
        }