The ABP version is 10.1.1 Micro Service Template Angular UI, I don't find code that call end-session end point.
Here is AI analyze to Angular code: Current logout.component.ts: revokeTokenAndLogout() already does the right thing:
The one missing piece — postLogoutRedirectUri is registered in OpenIddict seeder for the Angular client, but it's not in app.config.json, so angular-oauth2-oidc never sends it. Without it, after the auth server processes the logout, the user is left stranded on the auth server's logout page instead of being redirected back to Angular:
The 404 error is it because angular 21, the index.html is under browser subfolder now. modify the CICD. these two lines must be removed options.WildcardDomainsFormat.Add($@"{configuration["App:OpenIddictWildcardDomainsFormat"]}signin-oidc"); options.WildcardDomainsFormat.Add($@"{configuration["App:OpenIddictWildcardDomainsFormat"]}signout-callback-oidc");
Let me clarify this way, we have another project which is currently with ABP 9, both projects doesn't follow ABP's multi-tenant document page.
Project A (ABP 8 -> ABP 10 in progress): implemented in this way.
private void ConfigureTenantResolver(IWebHostEnvironment hostingEnvironment, IConfiguration configuration) { if (hostingEnvironment.IsDevelopment() || string.IsNullOrWhiteSpace(configuration["App:AuthDomainTenantResolverFormat"])) { Configure<AbpTenantResolveOptions>(options => { options.TenantResolvers.Clear(); options.TenantResolvers.Add(new HeaderTenantResolveContributor()); options.TenantResolvers.Add(new QueryStringTenantResolveContributor()); options.TenantResolvers.Add(new CookieTenantResolveContributor()); options.TenantResolvers.Add(new CurrentUserTenantResolveContributor()); //resolve tenant based on current user's tenant }); } else //Non-Development environments, use sub-domain tenant resolver { Configure<AbpTenantResolveOptions>(options => {
options.AddDomainTenantResolver(configuration["App:AuthDomainTenantResolverFormat"]);
});
Configure<OpenIddictServerOptions>(options =>
{
options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator;
options.TokenValidationParameters.ValidIssuers = new[]
{
configuration["AuthServer:Authority"],
$@"{configuration["App:AuthDomainTenantResolverFormat"] }/"
};
});
}
}
Project B (ABP 9) No matter which environment, it only uses this code in Gateway:
private void ConfigureTenantResolver() { Configure<AbpTenantResolveOptions>(options => { options.TenantResolvers.Clear(); options.TenantResolvers.Add(new HeaderTenantResolveContributor()); options.TenantResolvers.Add(new CookieTenantResolveContributor()); options.TenantResolvers.Add(new CurrentUserTenantResolveContributor()); //resolve tenant based on current user's tenant }); }
Now, it's project A has issue after upgrade to ABP 10: When with these two lines, angular will give a bad gateway exception options.WildcardDomainsFormat.Add($@"{configuration["App:OpenIddictWildcardDomainsFormat"]}signin-oidc"); options.WildcardDomainsFormat.Add($@"{configuration["App:OpenIddictWildcardDomainsFormat"]}signout-callback-oidc");
When remove these two lines, it gives after login and try to navigate to angular site:

Please note, our Angular App is deployed to azure storage, AI says ABP's muti-tenant document page also need to be deployed to AKS.
ABP 9's OpenIdDict is version 6, ABP 10 is OpenIdDirect is 7. Also our CI/CD team did some AKS ingress upgrade. These are the difference between the two projects.
I am using ABP 10.1.1
thanks, mongo:8.0 works
thanks
I think the simple way is, don't use ObjectMapper.Map method, just using the relection copy a set of properties values to target class. Though need specially handling if properties list contains CurrencyObject
It is not feasible.. Say the target class has big object graph, Auto Mapper map whole graph but ignore a list of properties from parameter. If only copy should copy properties by reflection which contain child entities, the list would be long and code would be complex.
Say the SurveyDataMapper has default Map method that map every property, and then call this extension method, it's too late, since SurveyDataMapper already mapped the properties that should ignore.
where should put this line: PatchExtensions.PatchFromMapped(uploaded, surveyData, mapper.Map, requiredProperties)?