Browse Source

Support multiple `PreActions`.

pull/21213/head
maliming 2 years ago
parent
commit
ae5980207d
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 10
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs
  2. 2
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs
  3. 4
      framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs

10
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs

@ -10,11 +10,17 @@ public class AbpHttpClientOptions
{ {
public Dictionary<Type, HttpClientProxyConfig> HttpClientProxies { get; set; } public Dictionary<Type, HttpClientProxyConfig> HttpClientProxies { get; set; }
public Dictionary<string, Action<HttpClientProxyConfig, ClientProxyRequestContext, HttpClient>> ProxyHttpClientPreSendActions { get; } public Dictionary<string, List<Action<HttpClientProxyConfig, ClientProxyRequestContext, HttpClient>>> ProxyHttpClientPreSendActions { get; }
public AbpHttpClientOptions() public AbpHttpClientOptions()
{ {
HttpClientProxies = new Dictionary<Type, HttpClientProxyConfig>(); HttpClientProxies = new Dictionary<Type, HttpClientProxyConfig>();
ProxyHttpClientPreSendActions = new Dictionary<string, Action<HttpClientProxyConfig, ClientProxyRequestContext, HttpClient>>(); ProxyHttpClientPreSendActions = new Dictionary<string, List<Action<HttpClientProxyConfig, ClientProxyRequestContext, HttpClient>>>();
}
public AbpHttpClientOptions AddPreSendAction(string remoteServiceName, Action<HttpClientProxyConfig, ClientProxyRequestContext, HttpClient> action)
{
ProxyHttpClientPreSendActions.GetOrAdd(remoteServiceName, () => new List<Action<HttpClientProxyConfig, ClientProxyRequestContext, HttpClient>>()).Add(action);
return this;
} }
} }

2
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs

@ -146,7 +146,7 @@ public class ClientProxyBase<TService> : ITransientDependency
HttpResponseMessage response; HttpResponseMessage response;
try try
{ {
foreach (var preSendAction in ClientOptions.Value.ProxyHttpClientPreSendActions.Where(x => x.Key == clientConfig.RemoteServiceName).Select(x => x.Value)) foreach (var preSendAction in ClientOptions.Value.ProxyHttpClientPreSendActions.Where(x => x.Key == clientConfig.RemoteServiceName).SelectMany(x => x.Value))
{ {
preSendAction(clientConfig, requestContext, client); preSendAction(clientConfig, requestContext, client);
} }

4
framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs

@ -1,9 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Http.Client; using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying; using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Client.Proxying;
using Volo.Abp.Http.DynamicProxying; using Volo.Abp.Http.DynamicProxying;
using Volo.Abp.Http.Localization; using Volo.Abp.Http.Localization;
using Volo.Abp.Localization; using Volo.Abp.Localization;
@ -64,7 +66,7 @@ public class AbpHttpClientTestModule : AbpModule
Configure<AbpHttpClientOptions>(options => Configure<AbpHttpClientOptions>(options =>
{ {
options.ProxyHttpClientPreSendActions.Add("Default", (_, requestContext, httpclient) => options.AddPreSendAction("Default", (_, requestContext, httpclient) =>
{ {
if (requestContext.Action.Name.Equals("TimeOutRequestAsync")) if (requestContext.Action.Name.Equals("TimeOutRequestAsync"))
{ {

Loading…
Cancel
Save