From 7c95170e1c5eab49c775ca7c853d3c642f0c5206 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:05:30 +0000 Subject: [PATCH 1/2] chore: upgrade EqDemo.AspNetCoreStencil.AdvancedSearch to .NET 8.0 - Target framework: net6.0 -> net8.0 - Microsoft.Data.Sqlite.Core: 6.0.1 -> 8.0.11 - Microsoft.EntityFrameworkCore.Sqlite: 6.0.1 -> 8.0.11 - Microsoft.EntityFrameworkCore.SqlServer: 6.0.1 -> 8.0.11 - Microsoft.Data.SqlClient: 2.1.7 -> 5.2.2 - Microsoft.IdentityModel.JsonWebTokens: 6.34.0 -> 6.35.0 - System.IdentityModel.Tokens.Jwt: 6.34.0 -> 6.35.0 - Replace Microsoft.AspNetCore.SpaServices.Extensions with Microsoft.AspNetCore.SpaProxy 8.0.11 - Remove VueCliMiddleware (incompatible with .NET 8) - Add SPA proxy configuration (SpaProxyLaunchCommand, SpaProxyServerUrl) - Update Startup.cs: remove old SPA middleware, add UseDefaultFiles and MapFallbackToFile Co-Authored-By: Toby Drinkall --- ...mo.AspNetCoreStencil.AdvancedSearch.csproj | 21 ++++++++++--------- AspNetCore/Stencil/AdvancedSearch/Startup.cs | 16 ++------------ 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj b/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj index 8ea48d12..669acf3c 100644 --- a/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj +++ b/AspNetCore/Stencil/AdvancedSearch/EqDemo.AspNetCoreStencil.AdvancedSearch.csproj @@ -1,6 +1,6 @@ - net6.0 + net8.0 true Latest false @@ -8,20 +8,21 @@ $(DefaultItemExcludes);$(SpaRoot)node_modules\** EqDemo.AspNetCoreStencil.AdvancedSearch true + npm start + http://localhost:4444 - - - - - - + + + + + + - + - @@ -69,4 +70,4 @@ - \ No newline at end of file + diff --git a/AspNetCore/Stencil/AdvancedSearch/Startup.cs b/AspNetCore/Stencil/AdvancedSearch/Startup.cs index 3cf95eb8..94cb0526 100644 --- a/AspNetCore/Stencil/AdvancedSearch/Startup.cs +++ b/AspNetCore/Stencil/AdvancedSearch/Startup.cs @@ -51,11 +51,6 @@ public void ConfigureServices(IServiceCollection services) // .RegisterDbGate(); // .RegisterDbGate(); - services.AddSpaStaticFiles(configuration => - { - configuration.RootPath = "ClientApp/www"; - }); - //to support non-Unicode code pages in PDF Exporter System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); } @@ -75,8 +70,8 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) } app.UseHttpsRedirection(); + app.UseDefaultFiles(); app.UseStaticFiles(); - app.UseSpaStaticFiles(); app.UseCors("AllowAllPolicy"); @@ -108,15 +103,8 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action=Index}/{id?}"); - }); - - app.UseSpa(spa => - { - spa.Options.SourcePath = "ClientApp"; - if (env.IsDevelopment()) { - spa.UseProxyToSpaDevelopmentServer("http://localhost:4444/"); - } + endpoints.MapFallbackToFile("index.html"); }); //Init demo database (if necessary) From 224be07893ed09f5e37d16d2054c568b18273576 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:14:52 +0000 Subject: [PATCH 2/2] fix: serve SPA static files from ClientApp/www instead of wwwroot Configure UseStaticFiles, UseDefaultFiles, and MapFallbackToFile with a PhysicalFileProvider pointing to ClientApp/www where Stencil outputs its build artifacts. The old AddSpaStaticFiles used RootPath=ClientApp/www but the default static file middleware serves from wwwroot which doesn't exist in this project. Co-Authored-By: Toby Drinkall --- AspNetCore/Stencil/AdvancedSearch/Startup.cs | 21 +++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/AspNetCore/Stencil/AdvancedSearch/Startup.cs b/AspNetCore/Stencil/AdvancedSearch/Startup.cs index 94cb0526..ce3ba97e 100644 --- a/AspNetCore/Stencil/AdvancedSearch/Startup.cs +++ b/AspNetCore/Stencil/AdvancedSearch/Startup.cs @@ -1,9 +1,11 @@ +using System.IO; using System.Data.SqlClient; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting; using Microsoft.EntityFrameworkCore; @@ -70,8 +72,14 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) } app.UseHttpsRedirection(); - app.UseDefaultFiles(); - app.UseStaticFiles(); + + var spaPath = Path.Combine(env.ContentRootPath, "ClientApp/www"); + if (Directory.Exists(spaPath)) + { + var fileProvider = new PhysicalFileProvider(spaPath); + app.UseDefaultFiles(new DefaultFilesOptions { FileProvider = fileProvider }); + app.UseStaticFiles(new StaticFileOptions { FileProvider = fileProvider }); + } app.UseCors("AllowAllPolicy"); @@ -104,7 +112,14 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) name: "default", pattern: "{controller}/{action=Index}/{id?}"); - endpoints.MapFallbackToFile("index.html"); + var fallbackSpaPath = Path.Combine(env.ContentRootPath, "ClientApp/www"); + if (Directory.Exists(fallbackSpaPath)) + { + endpoints.MapFallbackToFile("index.html", new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(fallbackSpaPath) + }); + } }); //Init demo database (if necessary)