How to get more detailed exception in ABP?

2019-04-11 21:44发布

问题:

I created a CrudAppService. When I invoke its dynamic api by using swagger, I get a generic 500 error with this description:

{
  "result": null,
  "targetUrl": null,
  "success": false,
  "error": {
    "code": 0,
    "message": "An internal error occurred during your request!",
    "details": null,
    "validationErrors": null
  },
  "unAuthorizedRequest": false,
  "__abp": true
}

How can I get a more detailed exception to debug? Is there something I have to enable?

ABP + ASP.NET Core

回答1:

Check error in Logs.txt.

From the documentation on Logging:

Configuration

All configuration is done for Log4Net when you create your application from ASP.NET Boilerplate templates.

...

It's defined in the log4net.config file of the application as shown below:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="Logs/Logs.txt" />


回答2:

You can simply send the exception detail to the client by enabling one of the ABP configuration (SendAllExceptionsToClients) to true as

Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;

in ***.Web.Core Module.

public override void PreInitialize()
{   
    Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}

Then you get the exception detail on the client. (Recommended only during development)



回答3:

If you use CurrentUnitOfWork, you can catch the exception also and using UserFriendlyException you can throw the desired exception. UserFriendlyException is a specific type of exception so ABP directly shows exception message to the end user.

Example:

try
{
    await _repository.InsertAsync(...);
    await CurrentUnitOfWork.SaveChangesAsync();
}
catch(Exception ex)
{
    throw new UserFriendlyException("user friendly exception message");
}