Blazor WASM保持刷新

问题描述

我有一个出色的WASM项目,该项目在开发和本地生产(在我的计算机上)上运行良好,但在生产linux服务器上则无法正常运行。 当我将项目发布到生产服务器(ubuntu 20.04)时,项目会保持发送请求(仅在客户端上-不在服务器上)
可能是什么?我没有安装SSL证书,因此所有请求都是http而不是https。

https://gfycat.com/reliablefarawaycurlew

客户端项目中的Program.cs

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");

        builder.Services.AddHttpClient("BlazorAppManagerWeb.ServerAPI",client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
            .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
        builder.Services.AddSingleton(new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
        ConfiguteServices(builder.Services);

        var host = builder.Build();

        var js = host.Services.GetrequiredService<IJSRuntime>();
        //var culture = await js.InvokeAsync<string>("getFromLocalStorage","culture");
        string culture = null;

        CultureInfo selectedCulture;

        if (culture == null)
        {
            selectedCulture = new CultureInfo("he-IL");
        }
        else
        {
            selectedCulture = new CultureInfo(culture);
        }

        CultureInfo.DefaultThreadCurrentCulture = selectedCulture;
        CultureInfo.DefaultThreadCurrentUICulture = selectedCulture;

        await host.RunAsync();
    }

    public static void ConfiguteServices(IServiceCollection services)
    {
        services.AddLocalization();
        services.AddScoped<IHttpService,HttpService>();
        services.AddScoped<Repository.IEntityRepository,Repository.EntityRepository>();
        services.AddScoped<IMyVehicleRepository,MyVehicleRepository>();
        services.AddScoped<IMyVehicleCommentRepository,MyVehicleCommentRepository>();
        services.AddScoped<IVehicleTypeRepository,VehicleTypeRepository>();
        services.AddScoped<IVehicleManufacturerRepository,VehicleManufacturerRepository>();
        services.AddScoped<IVehicleModelRepository,VehicleModelRepository>();
        services.AddScoped<IMyVehicleStatusRepository,MyVehicleStatusRepository>();
        services.AddScoped<IDocumentRepository,DocumentRepository>();
        services.AddScoped<IItemRepository,ItemRepository>();
        services.AddScoped<IMissionRepository,MissionRepository>();
        services.AddScoped<ICustomerVehicleRepository,CustomerVehicleRepository>();
        services.AddScoped<ICustomerVehicleStatusRepository,CustomerVehicleStatusRepository>();
        services.AddScoped<IMissionCardRepository,MissionCardRepository>();
        services.AddScoped<IBankRepository,BankRepository>();
        services.AddScoped<IDepositRepository,DepositRepository>();
        services.AddScoped<IGeneralRepository,GeneralRepository>();
        services.AddScoped<IEntityCommentRepository,EntityCommentRepository>();
        services.AddScoped<IEntityTodoRepository,EntityTodoRepository>();
        services.AddScoped<ICalendarRepository,CalendarRepository>();
        services.AddScoped<IReportsRepository,ReportsRepository>();
        services.AddScoped<Repository.InSControl.IEntityRepository,Repository.InSControl.EntityRepository>();
        services.AddScoped<IdisplayMessage,displayMessage>();
        services.AddFileReaderService(options => options.InitializeOnFirstCall = true);

        /* LOCALIZATION MANUALLY SET TO HEBREW
        var culture = new CultureInfo("he-IL");
        CultureInfo.DefaultThreadCurrentCulture = culture;
        CultureInfo.DefaultThreadCurrentUICulture = culture;*/

        // Supply HttpClient instances that include access tokens when making requests to the server project
        services.AddTransient(sp => sp.GetrequiredService<IHttpClientFactory>().CreateClient("BlazorAppManagerWeb.ServerAPI"));

        services.AddApiAuthorization();
    }
}

服务器中的Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        var webHost = CreateHostBuilder(args).Build();

        using(var scope = webHost.Services.CreateScope())
        {
            var services = scope.ServiceProvider;
            var context = services.GetService<ApplicationDbContext>();
            context.Database.Migrate();

            var context2 = services.GetService<ControlDbContext>();
            context2.Database.Migrate();
        }

        webHost.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

客户端项目中的Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    // For more @R_588_4045@ion on how to configure your application,visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>();

        services.AddDbContext<ControlDbContext>(options =>
        {
            options.UsesqlServer(
                Configuration.GetConnectionString("ControlConnection"));
        });

        services.AddDefaultIdentity<ApplicationUser>(options => {
            options.SignIn.RequireConfirmedAccount = false;
            options.Password.requiredigit = false;
            options.Password.RequireLowercase = false;
            options.Password.RequireUppercase = false;
            options.Password.RequireNonAlphanumeric = false;
            })
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddTransient<IEmailSender,EmailSender>();

        services.AddIdentityServer()
            .AddApiAuthorization<ApplicationUser,ApplicationDbContext>();

        services.ConfigureExternalCookie(options => {
            options.Cookie.IsEssential = true;
            options.Cookie.SameSite = SameSiteMode.Unspecified; //SameSiteMode.Unspecified in .NET Core 3.1
            options.ExpireTimeSpan = TimeSpan.FromDays(365);
        });

        services.ConfigureApplicationCookie(options => {
            options.Cookie.IsEssential = true;
            options.Cookie.SameSite = SameSiteMode.Unspecified; //SameSiteMode.Unspecified in .NET Core 3.1
            options.ExpireTimeSpan = TimeSpan.FromDays(365);
        });

        services.AddAuthentication()
            .AddIdentityServerJwt();

        services.AddAutoMapper(typeof(Startup));

        services.AddScoped<IFileStorageService,InAppStorageService>();
        services.AddHttpContextAccessor();
        services.AddTransient<IUserRepository,UserRepository>();
        services.AddTransient<IEntityRepository,EntityRepository>();

        services.AddMvc().AddNewtonsoftJson(options=> options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
        services.AddControllersWithViews();
        services.AddRazorPages();
        services.AddTransient<CustomerVehiclesController,CustomerVehiclesController>();
        CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("he-IL");
    }

    // 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.UseDatabaseErrorPage();
            app.UseWebAssemblyDebugging();
        }
        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();
        }

        app.UseHttpsRedirection();
        app.UseBlazorFrameworkFiles();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseIdentityServer();
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapControllers();
            endpoints.MapFallbackToFile("index.html");
        });
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)