Bagaimana cara mengkonfigurasi dotnet core 3 untuk menyajikan React SPA saat menggunakan Http.sys dan URLPrefix?

9

Setelah mengubah URLPrefix saya mendapatkan kesalahan berikut:

Halaman standar SPA middleware tidak dapat mengembalikan halaman default '/index.html' karena tidak ditemukan, dan tidak ada middleware lain yang menangani permintaan tersebut.

Karena itu diperlukan sesuatu untuk memberi tahu inti dotnet tentang awalan tetapi sepertinya saya tidak dapat menemukan kombinasi pengaturan yang tepat.

Bantuan sangat dihargai.

Kode di bawah ini:

HostBuilder diatur dengan:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseHttpSys(options =>
        {
            options.AllowSynchronousIO = false;
            options.Authentication.Schemes = AuthenticationSchemes.None;
            options.Authentication.AllowAnonymous = true;
            options.MaxConnections = null;
            options.MaxRequestBodySize = 30000000;
            options.UrlPrefixes.Add("http://localhost:5005/Product/Site");
        });
        webBuilder.UseStartup<Startup>();
    });

Konfigurasikan Layanan:

public override void ConfigureServices(IServiceCollection services)
{
  services.AddRazorPages();

  services.AddSpaStaticFiles(configuration =>
  {
    configuration.RootPath = "ClientApp/build";
  });

  services.AddMvc();
  services.AddResponseCompression(opts =>
  {
    opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
              new[] { "application/octet-stream" });
  });
}

Dan kemudian Konfigurasi adalah:

      app.UseSpaStaticFiles();
      app.UseRouting();
      app.UseEndpoints
      (
        endpoints =>
        {
          endpoints.MapControllerRoute(
              name: "default",
              pattern: "{controller}/{action=Index}/{id?}");
        }
      );

      app.UseSpa(spa =>
      {
        //spa.Options.DefaultPage = reactPath + "/index.html";
        spa.Options.DefaultPage = "/index.html";

        spa.Options.SourcePath = "ClientApp";


      });
Steven T. Cramer
sumber

Jawaban:

3

Ini tampaknya menjadi masalah di mana jalur ke file statis yang sebenarnya hilang. Dalam StaticFilesOptions Anda memastikan bahwa Anda memberikan path penyedia file ke index.html file statis Anda.

spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
            {
              FileProvider = new PhysicalFileProvider
              (
                @"<YourPath>"
              )
            }

Rincian lebih lanjut untuk opsi ini dapat ditemukan dalam dokumentasi Microsoft.

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1

Benjamin Grebner
sumber