feat(client): configure HttpClient with AuthRedirectHandler

- Add using statement for JdeScoping.Client.Http namespace
- Register AuthRedirectHandler as a scoped service
- Replace simple HttpClient registration with handler pipeline
- AuthRedirectHandler intercepts 401 responses and redirects to login
- Keep all existing service registrations for backward compatibility
This commit is contained in:
Joseph Doherty
2026-01-06 10:15:48 -05:00
parent ba88450feb
commit 7ad4e3ec1c
+21 -3
View File
@@ -1,6 +1,9 @@
using JdeScoping.Client;
using JdeScoping.Client.Auth;
using JdeScoping.Client.Http;
using JdeScoping.Client.Services;
using JdeScoping.Core.ApiContracts;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
@@ -10,11 +13,20 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");
// Configure HttpClient with base address
// Configure HttpClient with AuthRedirectHandler for global 401 handling
// In Blazor WebAssembly, the browser automatically handles cookies for same-origin requests
builder.Services.AddScoped(sp => new HttpClient
builder.Services.AddScoped<AuthRedirectHandler>();
builder.Services.AddScoped(sp =>
{
BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
var navigationManager = sp.GetRequiredService<NavigationManager>();
var handler = new AuthRedirectHandler(navigationManager)
{
InnerHandler = new HttpClientHandler()
};
return new HttpClient(handler)
{
BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
};
});
// Radzen services
@@ -40,4 +52,10 @@ builder.Services.AddScoped<ILookupService, LookupService>();
builder.Services.AddScoped<IFileService, FileService>();
builder.Services.AddScoped<IRefreshStatusService, RefreshStatusService>();
// New typed API clients (shared contracts)
builder.Services.AddScoped<ISearchApiClient, SearchApiClient>();
builder.Services.AddScoped<ILookupApiClient, LookupApiClient>();
builder.Services.AddScoped<IAuthApiClient, AuthApiClient>();
builder.Services.AddScoped<IFileApiClient, FileApiClient>();
await builder.Build().RunAsync();