Replaced ApiBaseUrl and DataApiBaseUrl with BaseUrl, ApiDefaultUrl, and service-specific configuration sections (AuthService, UserManagerService, DbFirstService). Updated AppSettings and all code references to use the new structure. Revised logic for HTTP client base URL selection to prefer service-specific settings. Updated appsettings files and added an example configuration for clarity and maintainability.
77 lines
2.9 KiB
C#
77 lines
2.9 KiB
C#
using DbFirst.BlazorWebApp;
|
|
using DbFirst.BlazorWebApp.Components;
|
|
using DbFirst.BlazorWebApp.Services;
|
|
using DevExpress.Blazor;
|
|
using System.Net;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
// Add services to the container.
|
|
builder.Services.AddRazorComponents()
|
|
.AddInteractiveServerComponents();
|
|
|
|
builder.Services.AddDevExpressBlazor(options => options.BootstrapVersion = BootstrapVersion.v5);
|
|
builder.Services.AddScoped<ThemeState>();
|
|
builder.Services.AddScoped<BandLayoutService>();
|
|
builder.Services.AddScoped<AuthService>();
|
|
builder.Services.AddScoped<CookieContainer>();
|
|
|
|
builder.Services.Configure<AppSettings>(builder.Configuration);
|
|
var appSettings = builder.Configuration.Get<AppSettings>() ?? new AppSettings();
|
|
|
|
// Alle API-Clients teilen sich denselben scoped CookieContainer (pro Blazor-Circuit),
|
|
// damit das Auth-Cookie nach dem Login automatisch an alle Folgeanfragen angehängt wird.
|
|
static HttpClient CreateHttpClientWithCookies(CookieContainer cookieContainer, string? baseUrl)
|
|
{
|
|
var handler = new HttpClientHandler { CookieContainer = cookieContainer, UseCookies = true };
|
|
var client = new HttpClient(handler);
|
|
if (!string.IsNullOrWhiteSpace(baseUrl))
|
|
client.BaseAddress = new Uri(baseUrl);
|
|
return client;
|
|
}
|
|
|
|
builder.Services.AddScoped<IAuthApiClient>(sp =>
|
|
{
|
|
var cc = sp.GetRequiredService<CookieContainer>();
|
|
var authBaseUrl = !string.IsNullOrWhiteSpace(appSettings.AuthService.BaseUrl)
|
|
? appSettings.AuthService.BaseUrl
|
|
: appSettings.BaseUrl;
|
|
var client = CreateHttpClientWithCookies(cc, authBaseUrl);
|
|
return new AuthApiClient(client, sp.GetRequiredService<AuthService>(), cc);
|
|
});
|
|
|
|
var apiDefaultUrl = !string.IsNullOrWhiteSpace(appSettings.ApiDefaultUrl)
|
|
? appSettings.ApiDefaultUrl
|
|
: appSettings.BaseUrl;
|
|
|
|
builder.Services.AddScoped<ICatalogApiClient>(sp =>
|
|
new CatalogApiClient(CreateHttpClientWithCookies(sp.GetRequiredService<CookieContainer>(), apiDefaultUrl)));
|
|
|
|
builder.Services.AddScoped<IDashboardApiClient>(sp =>
|
|
new DashboardApiClient(CreateHttpClientWithCookies(sp.GetRequiredService<CookieContainer>(), apiDefaultUrl)));
|
|
|
|
builder.Services.AddScoped<IMassDataApiClient>(sp =>
|
|
new MassDataApiClient(CreateHttpClientWithCookies(sp.GetRequiredService<CookieContainer>(), apiDefaultUrl)));
|
|
|
|
builder.Services.AddScoped<ILayoutApiClient>(sp =>
|
|
new LayoutApiClient(CreateHttpClientWithCookies(sp.GetRequiredService<CookieContainer>(), apiDefaultUrl)));
|
|
|
|
var app = builder.Build();
|
|
|
|
// Configure the HTTP request pipeline.
|
|
if (!app.Environment.IsDevelopment())
|
|
{
|
|
app.UseExceptionHandler("/Error", createScopeForErrors: true);
|
|
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
|
app.UseHsts();
|
|
}
|
|
|
|
app.UseHttpsRedirection();
|
|
|
|
app.UseStaticFiles();
|
|
app.UseAntiforgery();
|
|
|
|
app.MapRazorComponents<App>()
|
|
.AddInteractiveServerRenderMode();
|
|
|
|
app.Run(); |