Как получить более подробное исключение в ABP.IO? - PullRequest
0 голосов
/ 24 марта 2020

Как я могу получить более подробное исключение для отладки? Есть ли что-то, что я должен включить? SendAllExceptionsToClients

1 Ответ

0 голосов
/ 25 марта 2020

Используя Custom ExceptionFilter, SendAllExceptionsToClients смог изменить это значение

publi c class demoHttpApiHostModule: AbpModule {частная константная строка DefaultCorsPolicyName = "Default";

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        //if (hostingEnvironment.IsDevelopment())
        {
            context.Services.AddMvc(m => m.Filters.Add<CustomExceptionFilter>(1));
        }
    }

  public class CustomExceptionFilter : AbpExceptionFilter
{
    private readonly IExceptionToErrorInfoConverter _errorInfoConverter;
    private readonly IHttpExceptionStatusCodeFinder _statusCodeFinder;
    private readonly IJsonSerializer _jsonSerializer;
    public ILogger<CustomExceptionFilter> Logger { get; set; }

    public CustomExceptionFilter(IExceptionToErrorInfoConverter errorInfoConverter,
        IHttpExceptionStatusCodeFinder statusCodeFinder,
        IJsonSerializer jsonSerializer) : base(errorInfoConverter, statusCodeFinder, jsonSerializer)
    {
        _errorInfoConverter = errorInfoConverter;
        _statusCodeFinder = statusCodeFinder;
        _jsonSerializer = jsonSerializer;

        Logger = NullLogger<CustomExceptionFilter>.Instance;

        ((DefaultExceptionToErrorInfoConverter)errorInfoConverter).SendAllExceptionsToClients = true;
    }

    protected override void HandleAndWrapException(ExceptionContext context)
    {
        //TODO: Trigger an AbpExceptionHandled event or something like that.

        context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true");
        context.HttpContext.Response.StatusCode = (int)_statusCodeFinder.GetStatusCode(context.HttpContext, context.Exception);

        var remoteServiceErrorInfo = _errorInfoConverter.Convert(context.Exception);

        context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo));

        var logLevel = context.Exception.GetLogLevel();

        Logger.LogWithLevel(logLevel, $"---------- {nameof(RemoteServiceErrorInfo)} ----------");
        Logger.LogWithLevel(logLevel, _jsonSerializer.Serialize(remoteServiceErrorInfo, indented: true));
        Logger.LogException(context.Exception, logLevel);

        context.Exception = null; //Handled!
    }
}
...