Wie konfiguriere ich Dotnet Core 3 für die Bereitstellung von React SPA unter Verwendung von Http.sys und einem URLPrefix?

9

Nach dem Ändern des URLPrefix wird folgende Fehlermeldung angezeigt:

Die SPA-Standardseiten-Middleware konnte die Standardseite '/index.html' nicht zurückgeben, da sie nicht gefunden wurde und keine andere Middleware die Anforderung verarbeitet hat.

Daher ist etwas erforderlich, um dotnet core über das Präfix zu informieren, aber ich kann anscheinend nicht die richtige Kombination von Einstellungen finden.

Hilfe sehr geschätzt.

Der Code ist unten:

HostBuilder wird eingerichtet mit:

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>();
    });

ConfigureServices:

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" });
  });
}

Und dann ist Konfigurieren:

      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
quelle

Antworten:

3

Dies scheint ein Problem zu sein, bei dem der Pfad zu den tatsächlichen statischen Dateien verloren geht. Stellen Sie in Ihren StaticFilesOptions sicher, dass Sie einem Dateianbieter den Pfad zu Ihren statischen index.html-Dateien bereitstellen.

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

Weitere Details zu diesen Optionen finden Sie in der Microsoft-Dokumentation.

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

Benjamin Grebner
quelle