i create page in CMSKit and show that pages on Public Site that are work fine recently i get exception on that CMS Pages and Public Site is automatically redirect on Authserver . here is that exception
{ "code": null, "message": "Your request is not valid!", "details": "The following errors were detected during validation.\r\n - The value 'home' is not valid.\r\n", "data": null, "validationErrors": [ { "message": "The value 'home' is not valid.", "members": [ "id" ] } ] } 2026-04-16 07:13:59.473 +00:00 [WRN] ModelState is not valid! See ValidationErrors for details. Volo.Abp.Validation.AbpValidationException: ModelState is not valid! See ValidationErrors for details. at Volo.Abp.AspNetCore.Mvc.Validation.ModelStateValidator.Validate(ModelStateDictionary modelState) at Volo.Abp.AspNetCore.Mvc.Validation.AbpValidationActionFilter.OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) 2026-04-16 07:13:59.474 +00:00 [WRN] There are 1 validation errors: The value 'home' is not valid. (id) 2026-04-16 07:13:59.494 +00:00 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.Http.RemoteServiceErrorResponse'. (Emerald.HttpApi)' 2026-04-16 07:13:59.504 +00:00 [INF] Request finished HTTP/2 GET https://localhost:44362/home - 400 null application/json; charset=utf-8 5669.4966ms 2026-04-16 07:14:00.838 +00:00 [DBG] Executing HealthCheck collector HostedService. it give this exception on all CMS pages
- Template: app
- Created ABP Studio Version: 1.2.2
- Current ABP Studio Version: 2.2.6
- Tiered: Yes
- Multi-Tenancy: No
- UI Framework: blazor-webapp
- Theme: leptonx
- Theme Style: system
- Theme Menu Placement: side
- Database Provider: ef
- Database Management System: sqlserver
- Separate Tenant Schema: No
- Create Initial Migration: Yes
- Run Db Migrator: Yes
- Mobile Framework: none
- Public Website: Yes
- Social Login: Yes
- Include Tests: Yes
- Kubernetes Configuration: Yes
- Distributed Event Bus: rabbitmq
- Use Local References: No
- Optional Modules:
- GDPR
- FileManagement
- TextTemplateManagement
- LanguageManagement
- AuditLogging
- Chat
- OpenIddictAdmin
- Selected Languages: English, Spanish
- Default Language: English
- Create Command: abp new Emerald -t app --tiered --ui-framework blazor-webapp --database-provider ef --database-management-system sqlserver --theme leptonx --public-website --without-cms-kit --dont-run-bundling --no-multi-tenancy -no-saas -chat -file-management
5 Answer(s)
-
0
1. Solution
This error means your public website is hitting an API endpoint that expects
idas aGuid, but it is receiving a slug like"home":- Request:
GET https://localhost:44362/home - Validation error:
The value 'home' is not valid. (id) - So the route that is being executed is effectively something like
.../{id}whereidisGuid.
That’s why all CMS pages fail: the “catch-all route” that should map
/{slug}to the CMS Kit public page renderer is not being used anymore (routing order / endpoint mapping / fallback configuration changed after upgrade or custom routing/middleware).Apply these fixes (they are safe and deterministic):
- Ensure the CMS Kit Public Website module is actually included in the Public Web project In your Public Website host module, you must depend on the CMS Kit Public Web module (or the commercial equivalent if you’re using Pro). Example pattern:
[DependsOn( // ... typeof(Volo.CmsKit.Public.Web.CmsKitPublicWebModule) )] public class YourPublicWebModule : AbpModule { }If this dependency is missing, ABP won’t register the Razor Pages/routes that handle
/{slug}.- Make sure the Public Website is not mapping a “{id} as Guid” route at root Search your Public Web project for conventional routes like:
pattern: "{id}"or"{controller}/{action}/{id:guid?}"mapped at root- Minimal API routes like
app.MapGet("/{id}", ...)whereidis bound toGuid - Any
MapFallbackToPage(...)/ fallback endpoint that forwards everything to an endpoint that bindsidasGuid
Remove/adjust those routes so they don’t steal
/{slug}.- If you added global authorization, remove it for the Public Website
Your symptom “redirect to AuthServer” typically happens when the Public Website has a global authorization policy like
FallbackPolicy = DefaultPolicy/RequireAuthenticatedUser().
Make sure you did not configure a global “require authenticated user” policy for the Public Website app. If you did, remove it (public CMS pages must be anonymously accessible).
- Rebuild & restart both Public Web and HttpApi Host After fixing routing/module dependency/policies, restart. Then test:
GET /homeshould return HTML (page content)GET /api/cms-kit-public/pages/homeshould return 200/204 (depending on existence), not a redirect/challenge
If you did any module/feature changes, also run DbMigrator (you already do, but do it once after these changes).
2. Sources
- https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index
- https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Pages
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) - Request:
-
0
not help this
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
Hi,
Could you share a few things so we can reproduce this on our side?
- The module files of your
HttpApi.Host,Web.Public(.Host)andBlazor.WebApp.Tiered - The exact reproduction steps, including:
- Which URL/port you are hitting in the browser (e.g. the Public Website URL)
- How the
homeCMS page was created (ishomethe slug, or did you set it as the default home page?) - Whether you enabled
PagesFeatureviaGlobalFeatureManager
- Debug-level logs from the
HttpApi.Host(port 44362 in your log) and theWeb.Public(.Host)when the issue happens. Here is how to enable Debug logs: https://abp.io/support/questions/8622/How-to-enable-Debug-logs-for-troubleshoot-problems
If possible, a minimal reproduction project would speed things up a lot.
liming.ma@volosoft.com
Thanks
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) - The module files of your
-
0
https://drive.google.com/file/d/DELETED-inxLleY/view?usp=sharing
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
Hi,
Found the root cause. In your
NotificationController.cs:[HttpGet("/{id}")] public Task<NotificationDto> GetAsync(Guid id) { return _notificationAppService.GetAsync(id); }The leading
/in[HttpGet("/{id}")]makes the route absolute, which overrides the controller-level[Route("api/app/notification")]. As a result this action matches any single-segment URL at the root — including/home,/about, etc.Since
Emerald.Web.Publicdepends onEmeraldHttpApiModule, this controller is registered in the Public website's routing table. When yourHomeControllerredirects unauthenticated users to/home, ASP.NET Core matchesNotificationController.GetAsync, tries to bindhometo theGuid idparameter, fails, and returns 400. The[Authorize]attribute on the controller is also what triggers the AuthServer redirect you observed.The log confirms this:
Executing endpoint 'Emerald.Controllers.Notifications.NotificationController.GetAsync (Emerald.HttpApi)' Route matched with {area = "app", controller = "Notification", action = "Get"}. Executing controller action with signature ... GetAsync(System.Guid) ... Request finished HTTP/2 GET https://localhost:44362/home - 400Fix: Remove the leading
/so the route becomes relative to the controller:[HttpGet("{id}")] public Task<NotificationDto> GetAsync(Guid id) { return _notificationAppService.GetAsync(id); }The endpoint will then be
GET /api/app/notification/{id}as intended.Thanks
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)