From e821c8502cfc03bd518d8c90dbd7f1247a704968 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 24 Sep 2021 14:51:54 +0800 Subject: [PATCH 1/3] Solve the case of duplicate parameter types --- .../Http/Client/ClientProxying/ClientProxyBase.cs | 4 ++-- .../ClientProxying/ClientProxyRequestTypeValue.cs | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index caaed6f3df..3da09a1d18 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -55,7 +55,7 @@ namespace Volo.Abp.Http.Client.ClientProxying arguments = new ClientProxyRequestTypeValue(); } - var methodUniqueName = $"{typeof(TService).FullName}.{methodName}.{string.Join("-", arguments.Select(x => x.Key.FullName))}"; + var methodUniqueName = $"{typeof(TService).FullName}.{methodName}.{string.Join("-", arguments.Values.Select(x => x.Key.FullName))}"; var action = ClientProxyApiDescriptionFinder.FindAction(methodUniqueName); if (action == null) { @@ -65,7 +65,7 @@ namespace Volo.Abp.Http.Client.ClientProxying action, action.Parameters .GroupBy(x => x.NameOnMethod) - .Select((x, i) => new KeyValuePair(x.Key, arguments.Values.Skip(i).FirstOrDefault())) + .Select((x, i) => new KeyValuePair(x.Key, arguments.Values.Skip(i).First().Value)) .ToDictionary(x => x.Key, x => x.Value), typeof(TService)); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs index 7560a9971e..f412abac64 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs @@ -3,8 +3,18 @@ using System.Collections.Generic; namespace Volo.Abp.Http.Client.ClientProxying { - public class ClientProxyRequestTypeValue : Dictionary + public class ClientProxyRequestTypeValue { + public List> Values { get; private set; } + public ClientProxyRequestTypeValue() + { + Values = new List>(); + } + + public void Add(Type type, object value) + { + Values.Add(new KeyValuePair(type, value)); + } } } From 8d4224474bc87335f9f4054dd868477afbee3742 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 24 Sep 2021 14:56:35 +0800 Subject: [PATCH 2/3] Use index instead of Linq. --- .../Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index 3da09a1d18..5254b10238 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -65,7 +65,7 @@ namespace Volo.Abp.Http.Client.ClientProxying action, action.Parameters .GroupBy(x => x.NameOnMethod) - .Select((x, i) => new KeyValuePair(x.Key, arguments.Values.Skip(i).First().Value)) + .Select((x, i) => new KeyValuePair(x.Key, arguments.Values[i].Value)) .ToDictionary(x => x.Key, x => x.Value), typeof(TService)); } From df5d3e0cc4c9c5f136d5dc20293a4ab380b228d4 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 24 Sep 2021 15:00:13 +0800 Subject: [PATCH 3/3] Implement `IEnumerable` interface. --- .../ClientProxying/ClientProxyRequestTypeValue.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs index f412abac64..56487e8f95 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestTypeValue.cs @@ -1,9 +1,10 @@ using System; +using System.Collections; using System.Collections.Generic; namespace Volo.Abp.Http.Client.ClientProxying { - public class ClientProxyRequestTypeValue + public class ClientProxyRequestTypeValue : IEnumerable> { public List> Values { get; private set; } @@ -16,5 +17,15 @@ namespace Volo.Abp.Http.Client.ClientProxying { Values.Add(new KeyValuePair(type, value)); } + + public IEnumerator> GetEnumerator() + { + return Values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } } }