From 536b8ef5da153784ab39e0e24a69699701c056b2 Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 12 Jun 2026 13:10:17 +0200 Subject: [PATCH] Integrate YARP and DevExpress Blazor components Added YARP reverse proxy for API routing and DevExpress Blazor components for advanced UI features, including PDF Viewer. Updated `EnvelopeGenerator.WebUI.csproj` to include necessary packages and ensure `yarp.json` is copied to the output directory. Modified `Program.cs` to configure YARP and DevExpress services, and adjusted the HTTP pipeline for proper routing. Updated `appsettings.json` with `ApiOptions` and `PdfViewerOptions`. Added `yarp.json` to define reverse proxy routes and clusters. --- .../EnvelopeGenerator.WebUI.csproj | 10 +++++ .../EnvelopeGenerator.WebUI/Program.cs | 23 +++++++++++ .../EnvelopeGenerator.WebUI/appsettings.json | 11 +++++- .../EnvelopeGenerator.WebUI/yarp.json | 39 +++++++++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/yarp.json diff --git a/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI.csproj b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI.csproj index 2231cba0..017c195d 100644 --- a/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI.csproj +++ b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI.csproj @@ -9,6 +9,16 @@ + + + + + + + + + PreserveNewest + diff --git a/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/Program.cs b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/Program.cs index 8dfc98c8..19799648 100644 --- a/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/Program.cs +++ b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/Program.cs @@ -1,12 +1,31 @@ using EnvelopeGenerator.WebUI.Components; +using DevExpress.Blazor; var builder = WebApplication.CreateBuilder(args); +// Load YARP configuration +builder.Configuration.AddJsonFile("yarp.json", optional: false, reloadOnChange: true); + // Add services to the container. builder.Services.AddRazorComponents() .AddInteractiveServerComponents() .AddInteractiveWebAssemblyComponents(); +// YARP Reverse Proxy +builder.Services.AddReverseProxy() + .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); + +// DevExpress Server-Side Services (CRITICAL for DxPdfViewer) +builder.Services.AddDevExpressBlazor(configure => configure.BootstrapVersion = BootstrapVersion.v5); +builder.Services.AddDevExpressServerSideBlazorPdfViewer(); +// builder.Services.AddDevExpressBlazorReportViewer(); // Will be enabled after Options migration + +// Configuration Options (will be enabled in Phase 5 after Options migration) +// builder.Services.Configure( +// builder.Configuration.GetSection("ApiOptions")); +// builder.Services.Configure( +// builder.Configuration.GetSection("PdfViewerOptions")); + var app = builder.Build(); // Configure the HTTP request pipeline. @@ -26,9 +45,13 @@ app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAntiforgery(); +// Blazor routing (BEFORE YARP - important order!) app.MapRazorComponents() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof(EnvelopeGenerator.WebUI.Client._Imports).Assembly); +// YARP proxy (AFTER Blazor - catch-all for /api/*) +app.MapReverseProxy(); + app.Run(); diff --git a/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/appsettings.json b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/appsettings.json index 10f68b8c..46430479 100644 --- a/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/appsettings.json +++ b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/appsettings.json @@ -5,5 +5,14 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "ApiOptions": { + "BaseUrl": "" + }, + "PdfViewerOptions": { + "ThumbnailBaseScale": 0.75, + "ThumbnailEnableHiDPI": true, + "MainCanvasEnableHiDPI": true, + "ZoomStepPercentage": 5 + } } diff --git a/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/yarp.json b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/yarp.json new file mode 100644 index 00000000..63b6fb2e --- /dev/null +++ b/EnvelopeGenerator.WebUI/EnvelopeGenerator.WebUI/yarp.json @@ -0,0 +1,39 @@ +{ + "ReverseProxy": { + "Routes": { + "api-route": { + "ClusterId": "api-cluster", + "Match": { + "Path": "/api/{**catch-all}" + } + }, + "swagger-route": { + "ClusterId": "api-cluster", + "Match": { + "Path": "/swagger/{**catch-all}" + } + }, + "openapi-route": { + "ClusterId": "api-cluster", + "Match": { + "Path": "/openapi/{**catch-all}" + } + }, + "scalar-route": { + "ClusterId": "api-cluster", + "Match": { + "Path": "/scalar/{**catch-all}" + } + } + }, + "Clusters": { + "api-cluster": { + "Destinations": { + "api-destination": { + "Address": "https://localhost:8088" + } + } + } + } + } +}