添加项目文件。
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
using TechHelper.Client.HttpRepository;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
using MudBlazor;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
|
||||
namespace BlazorProducts.Client.HttpInterceptor
|
||||
{
|
||||
public class HttpInterceptorHandlerService : DelegatingHandler
|
||||
{
|
||||
private readonly NavigationManager _navManager;
|
||||
|
||||
private readonly RefreshTokenService _refreshTokenService;
|
||||
|
||||
private readonly ISnackbar _serviceProvider;
|
||||
private ISnackbar toastService = null;
|
||||
|
||||
public HttpInterceptorHandlerService(
|
||||
NavigationManager navManager,
|
||||
RefreshTokenService refreshTokenService,
|
||||
ISnackbar serviceProvider)
|
||||
{
|
||||
_navManager = navManager;
|
||||
_refreshTokenService = refreshTokenService;
|
||||
_serviceProvider = serviceProvider;
|
||||
}
|
||||
|
||||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
var absolutePath = request.RequestUri?.AbsolutePath;
|
||||
|
||||
_serviceProvider.Add("HELLO");
|
||||
if (absolutePath != null && !absolutePath.Contains("token") && !absolutePath.Contains("account"))
|
||||
{
|
||||
var token = await _refreshTokenService.TryRefreshToken();
|
||||
if (!string.IsNullOrEmpty(token))
|
||||
{
|
||||
request.Headers.Authorization =
|
||||
new AuthenticationHeaderValue("bearer", token);
|
||||
}
|
||||
}
|
||||
|
||||
var response = await base.SendAsync(request, cancellationToken);
|
||||
|
||||
HandleResponse(response);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private void HandleResponse(HttpResponseMessage response)
|
||||
{
|
||||
if (response is null)
|
||||
{
|
||||
_navManager.NavigateTo("/error");
|
||||
throw new HttpResponseException("Server not available.");
|
||||
}
|
||||
|
||||
var message = "";
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
switch (response.StatusCode)
|
||||
{
|
||||
case HttpStatusCode.NotFound:
|
||||
_navManager.NavigateTo("/404");
|
||||
message = "Resource not found.";
|
||||
break;
|
||||
case HttpStatusCode.BadRequest:
|
||||
message = "Invalid request. Please try again.";
|
||||
break;
|
||||
case HttpStatusCode.Unauthorized:
|
||||
_navManager.NavigateTo("/unauthorized");
|
||||
message = "Unauthorized access";
|
||||
break;
|
||||
default:
|
||||
_navManager.NavigateTo("/error");
|
||||
message = "Something went wrong. Please contact the administrator.";
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user