From 4f183560a09cd2b8917680e146d2f1807a75d466 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 2 Mar 2023 12:59:23 +0800 Subject: [PATCH] Add `AbpHttpClientStaticProxyingOptions`. --- .../AbpHttpClientProxyServiceConvention.cs | 28 ++++++++++++++++++- .../AbpHttpClientStaticProxyingOptions.cs | 14 ++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/StaticProxying/AbpHttpClientStaticProxyingOptions.cs diff --git a/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs b/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs index d44a294799..49080939c2 100644 --- a/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs +++ b/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs @@ -6,6 +6,7 @@ using System.Reflection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ActionConstraints; using Microsoft.AspNetCore.Mvc.ApplicationModels; +using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Volo.Abp.Application.Services; @@ -13,6 +14,7 @@ using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Conventions; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Client.StaticProxying; using Volo.Abp.Http.Modeling; using Volo.Abp.Reflection; @@ -24,14 +26,17 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention protected readonly IClientProxyApiDescriptionFinder ClientProxyApiDescriptionFinder; protected readonly List ControllerWithAttributeRoute; protected readonly List ActionWithAttributeRoute; + protected readonly AbpHttpClientStaticProxyingOptions StaticProxyingOptions; public AbpHttpClientProxyServiceConvention( IOptions options, IConventionalRouteBuilder conventionalRouteBuilder, - IClientProxyApiDescriptionFinder clientProxyApiDescriptionFinder) + IClientProxyApiDescriptionFinder clientProxyApiDescriptionFinder, + IOptions staticProxyingOptions) : base(options, conventionalRouteBuilder) { ClientProxyApiDescriptionFinder = clientProxyApiDescriptionFinder; + StaticProxyingOptions = staticProxyingOptions.Value; ControllerWithAttributeRoute = new List(); ActionWithAttributeRoute = new List(); } @@ -73,6 +78,27 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention } } + protected override void ConfigureParameters(ControllerModel controller) + { + foreach (var action in controller.Actions) + { + foreach (var prm in action.Parameters) + { + if (prm.BindingInfo != null) + { + continue; + } + + if (StaticProxyingOptions.BindingFromQueryTypes.Contains(prm.ParameterInfo.ParameterType)) + { + prm.BindingInfo = BindingInfo.GetBindingInfo(new[] { new FromQueryAttribute() }); + } + } + } + + base.ConfigureParameters(controller); + } + protected virtual bool ShouldBeRemove(ApplicationModel application, ControllerModel controllerModel) { return application.Controllers diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/StaticProxying/AbpHttpClientStaticProxyingOptions.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/StaticProxying/AbpHttpClientStaticProxyingOptions.cs new file mode 100644 index 0000000000..f7c74303a9 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/StaticProxying/AbpHttpClientStaticProxyingOptions.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.Http.Client.StaticProxying; + +public class AbpHttpClientStaticProxyingOptions +{ + public List BindingFromQueryTypes { get; } + + public AbpHttpClientStaticProxyingOptions() + { + BindingFromQueryTypes = new List(); + } +}