This commit is contained in:
SpecialX
2025-06-25 17:21:29 +08:00
parent f9ff57ff72
commit 262e7d6396
21 changed files with 1491 additions and 152 deletions

View File

@@ -1,19 +1,19 @@
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components;
using System.Net;
using System.Net.Http.Headers;
using TechHelper.Client.HttpRepository;
using System.Net.Http.Headers;
using TechHelper.Client.HttpRepository;
namespace BlazorProducts.Client.HttpInterceptor
{
public class HttpInterceptorHandlerService : DelegatingHandler
{
private readonly NavigationManager _navManager;
private readonly RefreshTokenService2 _refreshTokenService;
private readonly NavigationManager _navManager;
private readonly IRefreshTokenService _refreshTokenService;
public HttpInterceptorHandlerService(
NavigationManager navManager,
RefreshTokenService2 refreshTokenService)
IRefreshTokenService refreshTokenService)
{
_navManager = navManager;
_refreshTokenService = refreshTokenService;
@@ -25,15 +25,14 @@ namespace BlazorProducts.Client.HttpInterceptor
if (absolutePath != null && !absolutePath.Contains("token") && !absolutePath.Contains("account"))
{
var token = await _refreshTokenService.TryRefreshToken();
var token = await _refreshTokenService.TryRefreshToken();
if (!string.IsNullOrEmpty(token))
{
request.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
}
}
var response = await base.SendAsync(request, cancellationToken);
await HandleResponse(response);
@@ -45,17 +44,17 @@ namespace BlazorProducts.Client.HttpInterceptor
{
if (response is null)
{
_navManager.NavigateTo("/error");
throw new HttpResponseException("服务器不可用。");
throw new HttpResponseException("服务器不可用。");
}
if (!response.IsSuccessStatusCode)
{
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP 错误: {response.StatusCode}. 详情: {errorContent}");
Console.WriteLine($"HTTP 错误: {response.StatusCode}. 详情: {errorContent}");
switch (response.StatusCode)
{
@@ -67,8 +66,15 @@ namespace BlazorProducts.Client.HttpInterceptor
// 400 Bad Request error. Often, you don't navigate for this; you display validation errors on the UI.
break;
case HttpStatusCode.Unauthorized:
// 401 Unauthorized error. Navigate to an unauthorized page or login page.
_navManager.NavigateTo("/unauthorized"); // Or: _navManager.NavigateTo("/authentication/login");
var token = await _refreshTokenService.TryRefreshToken();
if (!string.IsNullOrEmpty(token))
{
_navManager.NavigateTo(_navManager.Uri, forceLoad: true);
}
else
{
_navManager.NavigateTo("/unauthorized");
}
break;
default:
// For all other errors, navigate to a general error page.