- ABP Framework version: v5.3.2
- UI type: Blazor
- DB provider: EF Core
- Tiered (MVC) or Identity Server Separated (Angular): no
Some BusinessException have been implemented and follow this doc.
https://docs.abp.io/en/abp/latest/Exception-Handling#business-exceptions
If it put the correct information on AbpAuditLogs table which is good, the "popup" do not show exactly what I would expect.
It is not good as the final user will not understand the error
I use this code to throw the error:
throw new BusinessException(AIGeneratorErrorCodes.ProjectManagement.ProjectMaxCountExceeded)
.WithData("MaxCount", AIGeneratorConsts.Project.MaxNumberOfProjectsPerUser);
By replacing it with UserFriendlyException, it show the code correctly (apart that I will need to use localizer to get the text), but information are not that good on the AbpAuditLogs table, in Exception field, I do not have MaxCount.
Is there any way to make the popup text for BusinessException as clear as UserFriendlyException?
12 Answer(s)
-
0
Hi,
Could you provide steps to reproduce? thanks.
-
0
-
0
Hi
You can see the document: https://docs.abp.io/en/abp/latest/Exception-Handling#using-error-codes
We also throw a
BusinessException
in our modules, you need to configure the localization https://github.com/abpframework/abp/blob/dev/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs#L67 -
0
Hi,
It remains the same, by configuring the localization it will change the text shown only. My issue here is that BusinessException do not return the message expected but "Exception of type..."
-
0
-
0
I see, from what you show me is that BusinessException do not show the error message but a generic error anytime right?
-
0
Hi,
Yes, this is by design.
BusinessException
will show the generic error message if there is no localization textThe document explains as well: https://docs.abp.io/en/abp/latest/Exception-Handling#business-exceptions
However, you can try this:
public class MyBusinessException : BusinessException, IUserFriendlyException { public MyBusinessException(string message) : base(code: Empty, message: message) { } } throw new MyBusinessException("Message");
-
0
Hi,
This is the point about "if there is no localization text" that annoy me, from the doc it is what I understood as well but even with a localization text I got generic message:
I tried to define either with "Localizer" or "LocalizationRessource", with either define on constructor or using DI (then I guess BusinessException localize automatically without using Localizer[] as we used everywhere?):
But still got this generic error:
the ressource seems ok as I got this on UserFriendlyException:
-
0
Hi,
https://docs.abp.io/en/abp/latest/Exception-Handling#business-exceptions
throw new BusinessException(QaErrorCodes.CanNotVoteYourOwnAnswer);
QaErrorCodes.CanNotVoteYourOwnAnswer is just a const string. The following error code format is recommended:
<code-namespace>:<error-code> Volo.Qa:010002
it expects a code,
And see this: https://docs.abp.io/en/abp/latest/Exception-Handling#using-error-codes
You have to configure the code namespaces map.
For example:
throw new BusinessException(QaDomainErrorCodes.CanNotVoteYourOwnAnswer);
- QaDomainErrorCodes.CanNotVoteYourOwnAnswer is
Volo.Qa:010002
in this example.
services.Configure<AbpExceptionLocalizationOptions>(options => { options.MapCodeNamespace("Volo.Qa", typeof(QaResource)); });
{ "culture": "en", "texts": { "Volo.Qa:010002": "You can not vote your own answer!" } }
- QaDomainErrorCodes.CanNotVoteYourOwnAnswer is
-
0
This is the point about "if there is no localization text" that annoy me
If you want to show the error message if there is no localization text, you can try this:
public class MyBusinessException: BusinessException, IUserFriendlyException { public MyBusinessException(string code, string message) : base(code: code, message: message) { } } throw new MyBusinessException("App:10001" , "The error message");
In this way, if there is no
App:10001
localization text, it will show the"The error message"
-
0
Actually my issue is different:
When I was doing some tests on my main project, I had the issue that it was not showing the message but "An internal error occured during your request".
It was my mistake as while implementing it for testing, I forgot to add
Configure<AbpExceptionLocalizationOptions>(options => { options.MapCodeNamespace("MyApp.ErrorCodes", typeof(MyAppResource)); });
I then added it and now the test is working well.
So you were completely right about when I was having "An internal error occured during your request" instead of my message, the localization text was missing.
However my initial issue is coming from a module"linked" to the main project.
I had a look on it and all is well implemented, localization is all fine.
What I do not really understand, is that anytimes (I mean even with or without localization), the message I get is different:
"Exception of type 'Volo.Abp.BusinessException' was thrown."
which is not "An internal error occured during your request"
Like if the BusinessException is shown differently.
My main project is on Blazor server, the module UI is Blazor Webassembly
-
0
I found the issue.
The problem was on how to manage to show the error on the blazor view.
The main project is using "HandleErrorAsync" method, and the module was using "UiMessageService.Error(ex.Message)"
As "HandleErrorAsync" was not available on my blazor component, I had to inherit from AbpComponentBase (I actually did same as the main project, I created a new class MyModuleComponentBase who inherit from AbpComponentBase and define LocalizationResource on it)
Thanks for your help anyway, I at least now understand way better on how BusinessException works (and how to show it as well).