From de6dfb3d9ec7b90c9736a6e10db1bcbf1eeb15f7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 29 Dec 2021 15:45:27 +0800 Subject: [PATCH 1/2] Add AreaAttribute to ClientProxy controller --- .../Mvc/AspNetCoreApiDescriptionModelProvider.cs | 12 ++++++++++-- .../AbpHttpClientProxyServiceConvention.cs | 10 ++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs index 5ceb180d47..4092788991 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs @@ -80,7 +80,7 @@ namespace Volo.Abp.AspNetCore.Mvc var setting = FindSetting(controllerType); var moduleModel = applicationModel.GetOrAddModule( - GetRootPath(controllerType, setting), + GetRootPath(controllerType, apiDescription.ActionDescriptor, setting), GetRemoteServiceName(controllerType, setting) ); @@ -327,7 +327,9 @@ namespace Volo.Abp.AspNetCore.Mvc return modelNameProvider.Name ?? parameterInfo.Name; } - private static string GetRootPath([NotNull] Type controllerType, + private static string GetRootPath( + [NotNull] Type controllerType, + [NotNull] ActionDescriptor actionDescriptor, [CanBeNull] ConventionalControllerSetting setting) { if (setting != null) @@ -341,6 +343,12 @@ namespace Volo.Abp.AspNetCore.Mvc return areaAttr.RouteValue; } + areaAttr = actionDescriptor.EndpointMetadata.OfType().FirstOrDefault(); + if (areaAttr != null) + { + return areaAttr.RouteValue; + } + return ModuleApiDescriptionModel.DefaultRootPath; } 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 52ccdabfc5..656c361062 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 @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Reflection; using Microsoft.AspNetCore.Mvc; @@ -50,6 +51,15 @@ 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()) From 3822c3c8536b7755a44656ae380749a3e6e70ee7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 29 Dec 2021 15:58:11 +0800 Subject: [PATCH 2/2] Update AspNetCoreApiDescriptionModelProvider.cs --- .../Mvc/AspNetCoreApiDescriptionModelProvider.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs index 4092788991..1e103d8440 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs @@ -337,13 +337,7 @@ namespace Volo.Abp.AspNetCore.Mvc return setting.RootPath; } - var areaAttr = controllerType.GetCustomAttributes().OfType().FirstOrDefault(); - if (areaAttr != null) - { - return areaAttr.RouteValue; - } - - areaAttr = actionDescriptor.EndpointMetadata.OfType().FirstOrDefault(); + var areaAttr = controllerType.GetCustomAttributes().OfType().FirstOrDefault() ?? actionDescriptor.EndpointMetadata.OfType().FirstOrDefault(); if (areaAttr != null) { return areaAttr.RouteValue;