Fixes hot module reloading through proxy. Production mode still redirects to https.
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using Microsoft.AspNetCore.Authentication;
 | 
						|
using Microsoft.AspNetCore.Builder;
 | 
						|
using Microsoft.AspNetCore.Hosting;
 | 
						|
using Microsoft.EntityFrameworkCore;
 | 
						|
using MultiShop.Data;
 | 
						|
using MultiShop.Models;
 | 
						|
using Microsoft.Extensions.Configuration;
 | 
						|
using Microsoft.Extensions.DependencyInjection;
 | 
						|
using Microsoft.Extensions.Hosting;
 | 
						|
 | 
						|
namespace MultiShop
 | 
						|
{
 | 
						|
    public class Startup
 | 
						|
    {
 | 
						|
        public Startup(IConfiguration configuration, IHostEnvironment environment)
 | 
						|
        {
 | 
						|
            Configuration = configuration;
 | 
						|
            Environment = environment;
 | 
						|
        }
 | 
						|
 | 
						|
        public IConfiguration Configuration { get; }
 | 
						|
        public IHostEnvironment Environment { get; }
 | 
						|
 | 
						|
        // This method gets called by the runtime. Use this method to add services to the container.
 | 
						|
        public void ConfigureServices(IServiceCollection services)
 | 
						|
        {
 | 
						|
            services.AddDbContext<ApplicationDbContext>(options =>
 | 
						|
                options.UseSqlite(
 | 
						|
                    Configuration.GetConnectionString("DefaultConnection")));
 | 
						|
 | 
						|
            services.AddDatabaseDeveloperPageExceptionFilter();
 | 
						|
 | 
						|
            services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
 | 
						|
                .AddEntityFrameworkStores<ApplicationDbContext>();
 | 
						|
 | 
						|
            services.AddIdentityServer()
 | 
						|
                .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(
 | 
						|
                    options => {
 | 
						|
                        options.Clients.AddIdentityServerSPA("MultiShop", spa => {
 | 
						|
                            spa.WithRedirectUri("/authentication/silent-login-callback");
 | 
						|
                            spa.WithRedirectUri("/authentication/login-callback");
 | 
						|
                            spa.WithRedirectUri("/authentication/logout-callback");
 | 
						|
                        });
 | 
						|
                    });
 | 
						|
 | 
						|
            services.AddAuthentication()
 | 
						|
                .AddIdentityServerJwt();
 | 
						|
            services.AddControllersWithViews();
 | 
						|
            services.AddRazorPages();
 | 
						|
            services.AddSpaStaticFiles(configuration =>
 | 
						|
            {
 | 
						|
                configuration.RootPath = "client/dist";
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        // 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();
 | 
						|
                app.UseMigrationsEndPoint();
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                app.UseExceptionHandler("/Error");
 | 
						|
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
 | 
						|
                app.UseHsts();
 | 
						|
            }
 | 
						|
 | 
						|
            if (!env.IsDevelopment()) app.UseHttpsRedirection();
 | 
						|
            app.UseStaticFiles();
 | 
						|
            if (!env.IsDevelopment()) app.UseSpaStaticFiles();
 | 
						|
 | 
						|
            app.UseRouting();
 | 
						|
 | 
						|
            app.UseAuthentication();
 | 
						|
            app.UseIdentityServer();
 | 
						|
            app.UseAuthorization();
 | 
						|
            app.UseEndpoints(endpoints =>
 | 
						|
            {
 | 
						|
                endpoints.MapControllerRoute(
 | 
						|
                    name: "default",
 | 
						|
                    pattern: "{controller}/{action=Index}/{id?}");
 | 
						|
                endpoints.MapRazorPages();
 | 
						|
            });
 | 
						|
 | 
						|
            app.UseSpa(spa =>
 | 
						|
            {
 | 
						|
                spa.Options.SourcePath = "../client"; // "May not exist in published applications" - https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.spaservices.spaoptions.sourcepath?view=aspnetcore-5.0#Microsoft_AspNetCore_SpaServices_SpaOptions_SourcePath 
 | 
						|
 | 
						|
                if (env.IsDevelopment())
 | 
						|
                {
 | 
						|
                    spa.UseProxyToSpaDevelopmentServer(Configuration["SPA:BaseUri"]);
 | 
						|
                }
 | 
						|
            });
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |