diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxyBase.cs index 523310390c..386a20efac 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxyBase.cs @@ -23,6 +23,8 @@ namespace Volo.Abp.Http.Client protected static readonly Dictionary ActionApiDescriptionModels = new Dictionary(); + private static object SyncLock = new object(); + protected virtual async Task MakeRequestAsync(string methodName, params object[] arguments) { await HttpProxyExecuter.MakeRequestAsync(await BuildHttpProxyExecuterContext(methodName, arguments)); @@ -42,13 +44,19 @@ namespace Volo.Abp.Http.Client var apiDescription = await ApiDescriptionCache.GetAsync(ApiDescriptionCacheKey, GetApplicationApiDescriptionModel); var controllers = apiDescription.Modules.Select(x=>x.Value).SelectMany(x => x.Controllers.Values).ToList(); - foreach (var controller in controllers.Where(x => x.Interfaces.Any())) + lock (SyncLock) { - var appServiceType = controller.Interfaces.Last().Type.Split('.').Last(); - - foreach (var actionItem in controller.Actions.Values) + foreach (var controller in controllers.Where(x => x.Interfaces.Any())) { - ActionApiDescriptionModels.Add($"{appServiceType}.{actionItem.Name}", actionItem); + var appServiceType = controller.Interfaces.Last().Type.Split('.').Last(); + + foreach (var actionItem in controller.Actions.Values) + { + if (!ActionApiDescriptionModels.ContainsKey($"{appServiceType}.{actionItem.Name}")) + { + ActionApiDescriptionModels.Add($"{appServiceType}.{actionItem.Name}", actionItem); + } + } } } }