From 9f9f503127dc5734a86814005776ce91fea1d8c7 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 30 Dec 2021 10:37:15 +0800 Subject: [PATCH] Enhanced `AbpHttpClientProxyServiceConvention`. Compatible with special situations. --- .../AbpHttpClientProxyServiceConvention.cs | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) 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 656c361062..bb0db66509 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 @@ -21,6 +21,7 @@ namespace Volo.Abp.Http.Client.Web.Conventions public class AbpHttpClientProxyServiceConvention : AbpServiceConvention { protected readonly IClientProxyApiDescriptionFinder ClientProxyApiDescriptionFinder; + protected readonly List ControllerWithAttributeRoute; protected readonly List ActionWithAttributeRoute; public AbpHttpClientProxyServiceConvention( @@ -30,6 +31,7 @@ namespace Volo.Abp.Http.Client.Web.Conventions : base(options, conventionalRouteBuilder) { ClientProxyApiDescriptionFinder = clientProxyApiDescriptionFinder; + ControllerWithAttributeRoute = new List(); ActionWithAttributeRoute = new List(); } @@ -51,15 +53,6 @@ namespace Volo.Abp.Http.Client.Web.Conventions { controller.ControllerName = controller.ControllerName.RemovePostFix("ClientProxy"); - var moduleApiDescription = FindModuleApiDescriptionModel(controller); - - if (moduleApiDescription != null && !moduleApiDescription.RootPath.IsNullOrWhiteSpace()) - { - var selector = controller.Selectors.FirstOrDefault(); - selector?.EndpointMetadata.Add(new AreaAttribute(moduleApiDescription.RootPath)); - controller.RouteValues.Add(new KeyValuePair("area", moduleApiDescription.RootPath)); - } - var controllerApiDescription = FindControllerApiDescriptionModel(controller); if (controllerApiDescription != null && !controllerApiDescription.ControllerGroupName.IsNullOrWhiteSpace()) @@ -77,6 +70,14 @@ namespace Volo.Abp.Http.Client.Web.Conventions { RemoveEmptySelectors(controller.Selectors); + var moduleApiDescription = FindModuleApiDescriptionModel(controller); + if (moduleApiDescription != null && !moduleApiDescription.RootPath.IsNullOrWhiteSpace()) + { + var selector = controller.Selectors.FirstOrDefault(); + selector?.EndpointMetadata.Add(new AreaAttribute(moduleApiDescription.RootPath)); + controller.RouteValues.Add(new KeyValuePair("area", moduleApiDescription.RootPath)); + } + var controllerType = controller.ControllerType.AsType(); var remoteServiceAtt = ReflectionHelper.GetSingleAttributeOrDefault(controllerType.GetTypeInfo()); if (remoteServiceAtt != null && !remoteServiceAtt.IsEnabledFor(controllerType)) @@ -111,15 +112,14 @@ namespace Volo.Abp.Http.Client.Web.Conventions return;; } + ControllerWithAttributeRoute.Add(controller); ActionWithAttributeRoute.Add(action); if (!action.Selectors.Any()) { var abpServiceSelectorModel = new SelectorModel { - AttributeRouteModel = new AttributeRouteModel( - new RouteAttribute(template: actionApiDescriptionModel.Url) - ), + AttributeRouteModel = new AttributeRouteModel(new RouteAttribute(template: actionApiDescriptionModel.Url)), ActionConstraints = { new HttpMethodActionConstraint(new[] { actionApiDescriptionModel.HttpMethod }) } }; @@ -142,9 +142,7 @@ namespace Volo.Abp.Http.Client.Web.Conventions if (selector.AttributeRouteModel == null) { - selector.AttributeRouteModel = new AttributeRouteModel( - new RouteAttribute(template: actionApiDescriptionModel.Url) - ); + selector.AttributeRouteModel = new AttributeRouteModel(new RouteAttribute(template: actionApiDescriptionModel.Url)); } if (!selector.ActionConstraints.OfType().Any()) @@ -157,14 +155,17 @@ namespace Volo.Abp.Http.Client.Web.Conventions protected virtual void ConfigureClientProxyApiExplorer(ControllerModel controller) { - if (controller.ApiExplorer.GroupName.IsNullOrEmpty()) + if (ControllerWithAttributeRoute.Contains(controller)) { - controller.ApiExplorer.GroupName = controller.ControllerName; - } + if (controller.ApiExplorer.GroupName.IsNullOrEmpty()) + { + controller.ApiExplorer.GroupName = controller.ControllerName; + } - if (controller.ApiExplorer.IsVisible == null) - { - controller.ApiExplorer.IsVisible = IsVisibleRemoteService(controller.ControllerType); + if (controller.ApiExplorer.IsVisible == null) + { + controller.ApiExplorer.IsVisible = IsVisibleRemoteService(controller.ControllerType); + } } foreach (var action in controller.Actions)