Dot-Net-Core
如何在使用 Http.sys 和 URLPrefix 時配置 dotnet core 3 以提供 React SPA?
更改 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