|
|
|
@ -3,6 +3,7 @@ using System.Net.Http; |
|
|
|
using System.Net.Http.Headers; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Microsoft.Extensions.Configuration; |
|
|
|
using Microsoft.JSInterop; |
|
|
|
using Volo.Abp.DependencyInjection; |
|
|
|
|
|
|
|
@ -12,14 +13,28 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly |
|
|
|
{ |
|
|
|
private readonly IJSRuntime _jsRuntime; |
|
|
|
|
|
|
|
public AbpBlazorClientHttpMessageHandler(IJSRuntime jsRuntime) |
|
|
|
private readonly ICookieService _cookieService; |
|
|
|
|
|
|
|
private readonly IConfiguration _configuration; |
|
|
|
|
|
|
|
private const string AntiForgeryCookieName = "XSRF-TOKEN"; |
|
|
|
|
|
|
|
private const string AntiForgeryHeaderName = "RequestVerificationToken"; |
|
|
|
|
|
|
|
public AbpBlazorClientHttpMessageHandler( |
|
|
|
IJSRuntime jsRuntime, |
|
|
|
ICookieService cookieService, |
|
|
|
IConfiguration configuration) |
|
|
|
{ |
|
|
|
_jsRuntime = jsRuntime; |
|
|
|
_cookieService = cookieService; |
|
|
|
_configuration = configuration; |
|
|
|
} |
|
|
|
|
|
|
|
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) |
|
|
|
{ |
|
|
|
await SetLanguageAsync(request, cancellationToken); |
|
|
|
await SetAntiForgeryTokenAsync(request); |
|
|
|
|
|
|
|
return await base.SendAsync(request, cancellationToken); |
|
|
|
} |
|
|
|
@ -38,5 +53,21 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly |
|
|
|
request.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(selectedLanguage)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task SetAntiForgeryTokenAsync(HttpRequestMessage request) |
|
|
|
{ |
|
|
|
var selfUri = new Uri(_configuration["App:SelfUrl"]); |
|
|
|
|
|
|
|
if (request.Method == HttpMethod.Get || request.Method == HttpMethod.Head || request.RequestUri.Host != selfUri.Host || request.RequestUri.Port != selfUri.Port) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var token = await _cookieService.GetAsync(AntiForgeryCookieName); |
|
|
|
if (!token.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
request.Headers.Add(AntiForgeryHeaderName, token); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|