Dot-Net-Core

如何在使用 Http.sys 和 URLPrefix 時配置 dotnet core 3 以提供 React SPA?

  • January 8, 2021

更改 URLPrefix 後,出現以下錯誤:

SPA 預設頁面中間件無法返回預設頁面“/index.html”,因為未找到它,並且沒有其他中間件處理該請求。

因此,需要一些東西來告訴 dotnet 核心有關前綴的資訊,但我似乎找不到正確的設置組合。

非常感謝幫助。

程式碼如下:

HostBuilder 設置為:

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

配置服務:

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

然後配置是:

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


     });

這似乎是實際靜態文件的路徑失去的問題。在您的 StaticFilesOptions 中,確保您為文件提供程序提供了 index.html 靜態文件的路徑。

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

這些選項的更多詳細資訊可以在 Microsoft 的文件中找到。

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

引用自:https://stackoverflow.com/questions/60303212