Skip to content

Commit b78b06b

Browse files
committed
HttpClientFactory refactor
1 parent 8a91f3f commit b78b06b

File tree

2 files changed

+27
-42
lines changed

2 files changed

+27
-42
lines changed

src/Ahk.GradeManagement/Ahk.GradeManagement.Client/Network/AuthorizationMessageHandler.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ namespace Ahk.GradeManagement.Client.Network;
44

55
public class AuthorizationMessageHandler(IAccessTokenProvider tokenProvider) : DelegatingHandler
66
{
7-
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
8-
CancellationToken cancellationToken)
7+
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
98
{
109
var accessTokenResult = await tokenProvider.RequestAccessToken();
1110

1211
if (accessTokenResult.TryGetToken(out var accessToken))
1312
{
14-
request.Headers.Authorization =
15-
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken.Value);
13+
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken.Value);
1614
}
1715

1816
return await base.SendAsync(request, cancellationToken);

src/Ahk.GradeManagement/Ahk.GradeManagement.Client/Program.cs

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,75 +5,62 @@
55

66
using Microsoft.AspNetCore.Authorization;
77
using Microsoft.AspNetCore.Components.Web;
8-
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
98
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
109

1110
using MudBlazor.Services;
1211

1312
using MudExtensions.Services;
1413

15-
using AuthorizationMessageHandler = Ahk.GradeManagement.Client.Network.AuthorizationMessageHandler;
16-
1714
namespace Ahk.GradeManagement.Client;
1815

1916
public class Program
2017
{
2118
public const string ServerApi = "ServerAPI";
22-
public const string SubjectApi = "SubjectAPI";
2319

2420
public static async Task Main(string[] args)
2521
{
2622
var builder = WebAssemblyHostBuilder.CreateDefault(args);
2723
builder.RootComponents.Add<App>("#app");
2824
builder.RootComponents.Add<HeadOutlet>("head::after");
2925

30-
builder.Services.AddScoped(sp => new HttpClient
31-
{
32-
BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
33-
});
34-
3526
builder.Services.AddMsalAuthentication(options =>
3627
{
3728
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
3829
options.ProviderOptions.DefaultAccessTokenScopes.Add("api://0ff49368-7e23-4e6a-9c57-973a6cac8bbd/AHK2.API");
3930
//Add scope for email
4031
});
32+
builder.Services.AddScoped<IAuthorizationHandler, UserTypeAuthorizationHandler>();
33+
builder.Services.AddAuthorizationCore(options =>
34+
{
35+
options.AddPolicy(Policy.RequireAdmin, policy => policy.Requirements.Add(new UserTypeRequirement([UserType.Admin])));
36+
options.AddPolicy(Policy.RequireTeacher, policy => policy.Requirements.Add(new UserTypeRequirement([UserType.Teacher, UserType.Admin])));
37+
});
4138

4239
builder.Services.AddScoped<CrudSnackbarService>();
43-
44-
builder.Services.AddTransient(sp => new AuthorizationMessageHandler(sp.GetRequiredService<IAccessTokenProvider>()));
45-
builder.Services.AddTransient(sp => new ExceptionMessageHandler(sp.GetRequiredService<CrudSnackbarService>()));
46-
40+
builder.Services.AddScoped<SubjectService>();
4741
builder.Services.AddSingleton<SelectedSubjectService>();
4842
builder.Services.AddSingleton<CurrentUserService>();
4943

50-
builder.Services.AddTransient(sp => new SubjectHeaderHandler(sp.GetRequiredService<SelectedSubjectService>()));
44+
builder.Services.AddTransient<AuthorizationMessageHandler>();
45+
builder.Services.AddTransient<ExceptionMessageHandler>();
46+
builder.Services.AddTransient<SubjectHeaderHandler>();
5147

52-
// Registering HttpClient that uses our custom handler
53-
builder.Services.AddHttpClient(ServerApi, client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
54-
.AddHttpMessageHandler<ExceptionMessageHandler>()
48+
builder.Services.ConfigureHttpClientDefaults(b => b
5549
.AddHttpMessageHandler<AuthorizationMessageHandler>()
56-
.AddHttpMessageHandler<SubjectHeaderHandler>();
57-
58-
builder.Services.AddScoped(sp => new SubjectClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
59-
builder.Services.AddScoped<SubjectService>();
60-
builder.Services.AddScoped(sp => new CourseClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
61-
builder.Services.AddScoped(sp => new SemesterClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
62-
builder.Services.AddScoped(sp => new LanguageClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
63-
builder.Services.AddScoped(sp => new UserClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
64-
builder.Services.AddScoped(sp => new GroupClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
65-
builder.Services.AddScoped(sp => new ExerciseClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
66-
builder.Services.AddScoped(sp => new AssignmentClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
67-
builder.Services.AddScoped(sp => new StudentClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
68-
builder.Services.AddScoped(sp => new DashboardClient(sp.GetRequiredService<IHttpClientFactory>().CreateClient(ServerApi)));
69-
70-
builder.Services.AddAuthorizationCore(options =>
71-
{
72-
options.AddPolicy(Policy.RequireAdmin, policy => policy.Requirements.Add(new UserTypeRequirement([UserType.Admin])));
73-
options.AddPolicy(Policy.RequireTeacher, policy => policy.Requirements.Add(new UserTypeRequirement([UserType.Teacher, UserType.Admin])));
74-
});
75-
76-
builder.Services.AddScoped<IAuthorizationHandler, UserTypeAuthorizationHandler>();
50+
.AddHttpMessageHandler<ExceptionMessageHandler>()
51+
.AddHttpMessageHandler<SubjectHeaderHandler>()
52+
.ConfigureHttpClient(client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)));
53+
54+
builder.Services.AddHttpClient<SubjectClient>();
55+
builder.Services.AddHttpClient<CourseClient>();
56+
builder.Services.AddHttpClient<SemesterClient>();
57+
builder.Services.AddHttpClient<LanguageClient>();
58+
builder.Services.AddHttpClient<UserClient>();
59+
builder.Services.AddHttpClient<GroupClient>();
60+
builder.Services.AddHttpClient<ExerciseClient>();
61+
builder.Services.AddHttpClient<AssignmentClient>();
62+
builder.Services.AddHttpClient<StudentClient>();
63+
builder.Services.AddHttpClient<DashboardClient>();
7764

7865
builder.Services.AddMudServices();
7966
builder.Services.AddMudExtensions();

0 commit comments

Comments
 (0)