diff --git a/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/POST.md b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/POST.md index 0c2dda3c05..51d3666478 100644 --- a/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/POST.md +++ b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/POST.md @@ -25,23 +25,67 @@ Here, some other features already covered in the ABP Framework announcement, but ### The Microservice Starter Template -TODO +We'd introduced an initial version of the [microservice starter template](https://docs.abp.io/en/commercial/4.3/startup-templates/microservice/index) in the [previous version](https://blog.abp.io/abp/ABP-IO-Platform-v4-2-RC-Has-Been-Released). It is getting more mature with this release. We've done a lot of improvements and changes including; + +* New **"service" template** to add new microservices for the solution. Still requires some manual work to integrate to other services and gateways, however it makes the progress very easy and straightforward. +* Added [Tye](https://github.com/dotnet/tye) configuration to develop and test the solution easier. +* Added [Prometheus](https://prometheus.io/), [Grafana](https://grafana.com/) integrations for monitoring the solution. +* **Automatic database migrations**. Every microservice automatically checks and migrates/seeds its own database on startup (concurrency issues are resolved for multiple instance case). For multi-tenant systems, tenant databases are also upgraded by queue. +* For multi-tenant systems, **databases are created on the fly** for new tenants those have separate connection strings. +* Created **separate solution (`.sln`) file** for each microservice, gateway and application. In this way, you can focus on what you are working on. The main (roof) solution file only includes the executable projects in these solutions. +* All microservices are converted to the standard **layered module structure** which makes easier to align with ABP application development practices. + +After this release, we will be preparing microservice development guides based on this startup solution. ### Separate Tenant Schema -TODO +ABP's multi-tenancy system allows to create dedicated databases for tenants. However, the application startup solution comes with a single database migration path, hence it has a single database schema. As a result, tenant databases have some host-related tables. These tables are not used for tenants, they are always empty. However, their existence may disturb us as a clean developer. + +With this release, the application startup template provides an option to address this problem. So, if you want, you can have a separate migration path for tenant databases. Of course, this has a cost; You will have two DbContexts for migration purposes, which brings additional complexity to your solution. We've done our best to reduce this complexity and also added a README file into the migration assembly. If you prefer this approach, please check that README file. + +You can specify the new `--separate-tenant-schema` parameter while you are creating a new solution using the [ABP CLI](https://docs.abp.io/en/abp/4.3/CLI): + +````bash +abp new Acme.BookStore --separate-tenant-schema +```` + +If you prefer the [ABP Suite](https://docs.abp.io/en/commercial/latest/abp-suite/create-solution) to create solutions, you can check the *Separated tenant schema* option. + +![abp-suite-separate-tenant-schema](abp-suite-separate-tenant-schema.png) ### Forms Module -TODO +*Forms* is a new module that is being introduced with this version. It looks like the Google Forms application; You dynamically create forms on the UI and send it to people to answer. Then you can get statistics/report and export answers to a CSV file. + +Forms module currently supports the following question types; + +* **Free text** +* Selecting a **single option** from a **dropdown** list or a **radio button** list +* **Multiple choice**: Selecting multiple options from a checkbox list + +**Screenshot: editing form and questions - view responses** + +![forms-edit-report](forms-edit-report.png) + +**Screenshot: answering to the form** + +![forms-answer](forms-answer.png) -### Lepton Theme -TODO ### Team License Source Code for Modules -TODO +Team License users can't access the source code of modules and themes as a license restriction. You have to buy Business or Enterprise license to be able to download full source code of any module/theme. + +However, we got many feedbacks from Team License customers that they need to source code of the account module and the lepton theme. We see that customization of these two modules is highly necessary for most of our customers. + +With this version, we decided to allow Team License holders to download the source code of the **Account Module** and the **Lepton Theme**, so they can freely customize them based on their requirements. + +Remember that; when you include the source code in your own solution, it is your responsibility if you want to upgrade them when we release new versions (while you don't have to upgrade them). + +### Lepton Theme Public Website Layout + +We'd added a public website application in the application starter template in previous versions. It was using the public website layout of the Lepton Theme. We realized that the layout of this application is customized or completely changed in most of the solutions. So, with this version, the layout is included inside the application in the downloaded solution. You can freely change it. Before, you had to download it separately and include into your solution manually. ### Other Features/Changes diff --git a/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/abp-suite-separate-tenant-schema.png b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/abp-suite-separate-tenant-schema.png new file mode 100644 index 0000000000..ae80e744f4 Binary files /dev/null and b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/abp-suite-separate-tenant-schema.png differ diff --git a/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/forms-answer.png b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/forms-answer.png new file mode 100644 index 0000000000..0a3c3318d6 Binary files /dev/null and b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/forms-answer.png differ diff --git a/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/forms-edit-report.png b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/forms-edit-report.png new file mode 100644 index 0000000000..670e5883b9 Binary files /dev/null and b/docs/en/Blog-Posts/2021-03-31 v4_3 Commercial Preview/forms-edit-report.png differ diff --git a/docs/en/Blog-Posts/2021-03-31 v4_3 Preview/POST.md b/docs/en/Blog-Posts/2021-03-31 v4_3 Preview/POST.md index bd052e0041..4379563937 100644 --- a/docs/en/Blog-Posts/2021-03-31 v4_3 Preview/POST.md +++ b/docs/en/Blog-Posts/2021-03-31 v4_3 Preview/POST.md @@ -176,9 +176,10 @@ TODO: EXAMPLE ### Other Features/Changes * [#7423](https://github.com/abpframework/abp/issues/7423) MongoDB repository base aggregation API. -* [#8163](https://github.com/abpframework/abp/issues/8163) Ignoring files on minification for MVC UI. +* [#8163](https://github.com/abpframework/abp/issues/8163) Ignoring given files on minification for MVC UI. * [#7799](https://github.com/abpframework/abp/pull/7799) Added `RequiredPermissionName` to `ApplicationMenuItem` for MVC & Blazor UI to easily show/hide menu items based on user permissions. Also added `RequiredPermissionName` to `ToolbarItem` for the MVC UI for the same purpose. * [#7523](https://github.com/abpframework/abp/pull/7523) Add more bundle methods to the distributed cache. +* [#8013](https://github.com/abpframework/abp/pull/8013) Handle `JsonProperty` attribute on Angular proxy generation. See the [4.3 milestone](https://github.com/abpframework/abp/milestone/49) on GitHub for all changes made on this version. diff --git a/docs/en/UI/Angular/Account-Module.md b/docs/en/UI/Angular/Account-Module.md index 17a0e848ef..0227a53b62 100644 --- a/docs/en/UI/Angular/Account-Module.md +++ b/docs/en/UI/Angular/Account-Module.md @@ -2,7 +2,7 @@ Angular UI account module is available as of v4.3. It contains some pages (login, register, manage your profile, etc.). -If you implement the account module to your project; +If you add the account module to your project; - "Manage your profile" link in the current user dropdown on the top bar will redirect the user to a page in the account module. - You can switch the authentication flow to the resource owner password flow. @@ -93,15 +93,15 @@ export class AppRoutingModule {} ### Manage Profile Page -Before v4.3, the "Manage Your Profile" link in the current user dropdown on the top bar redirected the user to MVC's profile management page. As of v4.3, if you implemented the account module to your project, the same link will land on a page in the Angular UI account module instead. +Before v4.3, the "Manage Your Profile" link in the current user dropdown on the top bar redirected the user to MVC's profile management page. As of v4.3, if you added the account module to your project, the same link will land on a page in the Angular UI account module instead. ### My Security Logs Page [COMMERCIAL] -Before v4.3, the "My Security Logs" link in the current user dropdown on the top bar redirected the user to MVC's my security logs page. As of v4.3, if you implemented the account module to your project, the same link will land on a page in the Angular UI account public module instead. +Before v4.3, the "My Security Logs" link in the current user dropdown on the top bar redirected the user to MVC's my security logs page. As of v4.3, if you added the account module to your project, the same link will land on a page in the Angular UI account public module instead. ### Resource Owner Password Flow -OAuth is preconfigured as authorization code flow in Angular application templates by default. If you implemented the account module to your project, you can switch the flow to resource owner password flow by changing the OAuth configuration in the _environment.ts_ files as shown below: +OAuth is preconfigured as authorization code flow in Angular application templates by default. If you added the account module to your project, you can switch the flow to resource owner password flow by changing the OAuth configuration in the _environment.ts_ files as shown below: ```js import { Config } from '@abp/ng.core'; diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 0d2722574c..99e732cf9c 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -517,7 +517,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB ); } - public async Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default) + public virtual async Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default) { cancellationToken = GetCancellationToken(cancellationToken); @@ -531,7 +531,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB ); } - public async Task> GetAggregateAsync(CancellationToken cancellationToken = default) + public virtual async Task> GetAggregateAsync(CancellationToken cancellationToken = default) { cancellationToken = GetCancellationToken(cancellationToken); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs index a6660a324f..1c42d3cf92 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs @@ -1,8 +1,9 @@ using System.Threading.Tasks; +using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Tags { - public interface IEntityTagAdminAppService + public interface IEntityTagAdminAppService : IApplicationService { Task AddTagToEntityAsync(EntityTagCreateDto input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs index 5e8067ed6f..5c4d2fe22e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -11,7 +11,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs { [RequiresGlobalFeature(typeof(BlogsFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Authorize(CmsKitAdminPermissions.Blogs.Default)] [Route("api/cms-kit-admin/blogs")] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs index 46cdf2fe54..65ed95f646 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs @@ -12,7 +12,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs { [RequiresGlobalFeature(typeof(BlogsFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Authorize(CmsKitAdminPermissions.Blogs.Features)] [Route("api/cms-kit-admin/blogs/{blogId}/features")] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index a9b0727c17..72f16c5ef2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -11,7 +11,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs { [RequiresGlobalFeature(typeof(BlogsFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] [Route("api/cms-kit-admin/blogs/blog-posts")] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs index 91482d137a..e74e413534 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs @@ -12,7 +12,7 @@ namespace Volo.CmsKit.Admin.Comments { [Authorize(CmsKitAdminPermissions.Comments.Default)] [RequiresGlobalFeature(typeof(CommentsFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Route("api/cms-kit-admin/comments")] public class CommentAdminController : CmsKitAdminController, ICommentAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs index 91cd5170a5..da84dc8a3d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs @@ -12,7 +12,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.MediaDescriptors { [RequiresGlobalFeature(typeof(MediaFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Route("api/cms-kit-admin/media")] public class MediaDescriptorAdminController : CmsKitAdminController, IMediaDescriptorAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs index 810f09330f..3b11c3f850 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs @@ -11,7 +11,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Pages { [RequiresGlobalFeature(typeof(PagesFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Authorize(CmsKitAdminPermissions.Pages.Default)] [Route("api/cms-kit-admin/pages")] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs index 532fae8554..80f483c856 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs @@ -9,7 +9,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Tags { [RequiresGlobalFeature(typeof(TagsFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Route("api/cms-kit-admin/entity-tags")] public class EntityTagAdminController : CmsKitAdminController, IEntityTagAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs index 4655c60bd6..064fc203aa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs @@ -14,7 +14,7 @@ using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags { [RequiresGlobalFeature(typeof(TagsFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Authorize(CmsKitAdminPermissions.Tags.Default)] [Route("api/cms-kit-admin/tags")] diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Blogs/IBlogFeatureAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Blogs/IBlogFeatureAppService.cs index 968a820ae9..52a1dbd71a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Blogs/IBlogFeatureAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Blogs/IBlogFeatureAppService.cs @@ -1,9 +1,10 @@ using System; using System.Threading.Tasks; +using Volo.Abp.Application.Services; namespace Volo.CmsKit.Blogs { - public interface IBlogFeatureAppService + public interface IBlogFeatureAppService : IApplicationService { Task GetOrDefaultAsync(Guid blogId, string featureName); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Blogs/BlogFeatureAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Blogs/BlogFeatureAppService.cs index f5a796a33b..5f6a38c95c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Blogs/BlogFeatureAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Blogs/BlogFeatureAppService.cs @@ -2,9 +2,12 @@ using System; using System.Threading.Tasks; using Volo.Abp.Caching; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Blogs { + [RequiresGlobalFeature(typeof(BlogsFeature))] public class BlogFeatureAppService : CmsKitAppServiceBase, IBlogFeatureAppService { protected virtual IBlogFeatureRepository BlogFeatureRepository { get; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitCommonHttpApiModule.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitCommonHttpApiModule.cs index b839fe9ef7..e94344d1a0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitCommonHttpApiModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitCommonHttpApiModule.cs @@ -1,4 +1,5 @@ using Localization.Resources.AbpUi; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Localization; using Volo.Abp.Modularity; @@ -12,6 +13,15 @@ namespace Volo.CmsKit )] public class CmsKitCommonHttpApiModule : AbpModule { + + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(CmsKitCommonHttpApiModule).Assembly); + }); + } + public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs index b1f18e2511..7d36b60160 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs @@ -9,7 +9,7 @@ using Volo.CmsKit.Tags; namespace Volo.CmsKit.Public.Tags { [RequiresGlobalFeature(typeof(TagsFeature))] - [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Route("api/cms-kit-public/tags")] public class TagPublicController : CmsKitPublicControllerBase, ITagAppService