25 changed files with 359 additions and 325 deletions
@ -1,92 +1,92 @@ |
|||||
<Project> |
<Project> |
||||
<ItemGroup> |
<ItemGroup> |
||||
<PackageReference Update="Volo.Abp.Autofac" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Autofac" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Json" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Json" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Validation" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Validation" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Ddd.Domain" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Ddd.Domain" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AutoMapper" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AutoMapper" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.ObjectMapping" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.ObjectMapping" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.AspNetCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.AspNetCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Caching" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Caching" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.BlobStoring.Aliyun" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.BlobStoring.Aliyun" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.BackgroundJobs" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.BackgroundJobs" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.BackgroundJobs.HangFire" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.BackgroundJobs.HangFire" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.SignalR" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.SignalR" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TestBase" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TestBase" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.MySQL" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.EntityFrameworkCore.MySQL" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.BackgroundJobs.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.BackgroundJobs.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Account.Web" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Account.Web" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Caching.StackExchangeRedis" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Caching.StackExchangeRedis" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.PostgreSql" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.EntityFrameworkCore.PostgreSql" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.Serilog" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.Serilog" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Swashbuckle" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Swashbuckle" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Ddd.Application" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Ddd.Application" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Ddd.Application.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Ddd.Application.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Authorization" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Authorization" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Dapper" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Dapper" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.Mvc" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Http.Client" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Http.Client" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.MongoDB" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.MongoDB" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.Sqlite" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.EntityFrameworkCore.Sqlite" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Http.Client.IdentityModel" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Http.Client.IdentityModel" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.MultiTenancy" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.MultiTenancy" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Account.Application" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Account.Application" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.Application" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.Application" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.PermissionManagement.Application" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.PermissionManagement.Application" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TenantManagement.Application" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TenantManagement.Application" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.FeatureManagement.Application" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.FeatureManagement.Application" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.SettingManagement.Application" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.SettingManagement.Application" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.ObjectExtending" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.ObjectExtending" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Account.Application.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Account.Application.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.Application.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.Application.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.PermissionManagement.Application.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.PermissionManagement.Application.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TenantManagement.Application.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TenantManagement.Application.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.FeatureManagement.Application.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.FeatureManagement.Application.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.SettingManagement.Application.Contracts" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.SettingManagement.Application.Contracts" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Emailing" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Emailing" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Identity" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Identity" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AuditLogging.Domain" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AuditLogging.Domain" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TenantManagement.Domain" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TenantManagement.Domain" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.FeatureManagement.Domain" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.FeatureManagement.Domain" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.SettingManagement.Domain" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.SettingManagement.Domain" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.Domain" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.Domain" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.Domain.Shared" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.Domain.Shared" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain.Shared" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain.Shared" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AuditLogging.Domain.Shared" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AuditLogging.Domain.Shared" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TenantManagement.Domain.Shared" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TenantManagement.Domain.Shared" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.FeatureManagement.Domain.Shared" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.FeatureManagement.Domain.Shared" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Shared" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Shared" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.SettingManagement.Domain.Shared" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.SettingManagement.Domain.Shared" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Account.HttpApi" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Account.HttpApi" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.HttpApi" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.HttpApi" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Account.HttpApi.Client" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Account.HttpApi.Client" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Identity.HttpApi.Client" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Identity.HttpApi.Client" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi.Client" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi.Client" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi.Client" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi.Client" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi.Client" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi.Client" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi.Client" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi.Client" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Core" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Core" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.EntityFrameworkCore" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.EntityFrameworkCore" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.TestBase" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.TestBase" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.EventBus.Kafka" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.EventBus.Kafka" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.EventBus" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.EventBus" Version="6.0.1"/> |
||||
<PackageReference Update="Volo.Abp.Kafka" Version="5.3.4"/> |
<PackageReference Update="Volo.Abp.Kafka" Version="6.0.1"/> |
||||
</ItemGroup> |
</ItemGroup> |
||||
</Project> |
</Project> |
||||
@ -0,0 +1,6 @@ |
|||||
|
namespace Lion.AbpPro.Extension.Customs.Dtos |
||||
|
{ |
||||
|
public class WrapResultAttribute : Attribute |
||||
|
{ |
||||
|
} |
||||
|
} |
||||
@ -1,99 +0,0 @@ |
|||||
namespace Lion.AbpPro.Extensions.MVC.Filters |
|
||||
{ |
|
||||
public sealed class ResultExceptionFilter : IAsyncExceptionFilter, ITransientDependency |
|
||||
{ |
|
||||
public async Task OnExceptionAsync(ExceptionContext context) |
|
||||
{ |
|
||||
if (!ShouldHandleException(context)) |
|
||||
{ |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
await HandleAndWrapException(context); |
|
||||
} |
|
||||
|
|
||||
private bool ShouldHandleException(ExceptionContext context) |
|
||||
{ |
|
||||
if (context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.GetCustomAttributes(typeof(DontWrapResultAttribute), true).Any()) |
|
||||
{ |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
if (context.ActionDescriptor.GetMethodInfo().GetCustomAttributes(typeof(DontWrapResultAttribute), true).Any()) |
|
||||
{ |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
return false; |
|
||||
} |
|
||||
|
|
||||
private async Task HandleAndWrapException(ExceptionContext context) |
|
||||
{ |
|
||||
var exceptionHandlingOptions = context.GetRequiredService<IOptions<AbpExceptionHandlingOptions>>().Value; |
|
||||
var exceptionToErrorInfoConverter = context.GetRequiredService<IExceptionToErrorInfoConverter>(); |
|
||||
var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception, options => |
|
||||
{ |
|
||||
options.SendExceptionsDetailsToClients = exceptionHandlingOptions.SendExceptionsDetailsToClients; |
|
||||
options.SendStackTraceToClients = exceptionHandlingOptions.SendStackTraceToClients; |
|
||||
}); |
|
||||
|
|
||||
var logLevel = context.Exception.GetLogLevel(); |
|
||||
|
|
||||
var remoteServiceErrorInfoBuilder = new StringBuilder(); |
|
||||
remoteServiceErrorInfoBuilder.AppendLine($"---------- {nameof(RemoteServiceErrorInfo)} ----------"); |
|
||||
remoteServiceErrorInfoBuilder.AppendLine(context.GetRequiredService<IJsonSerializer>().Serialize(remoteServiceErrorInfo, indented: true)); |
|
||||
|
|
||||
var logger = context.GetService<ILogger<ResultExceptionFilter>>(NullLogger<ResultExceptionFilter>.Instance); |
|
||||
|
|
||||
logger.LogWithLevel(logLevel, remoteServiceErrorInfoBuilder.ToString()); |
|
||||
|
|
||||
logger.LogException(context.Exception, logLevel); |
|
||||
|
|
||||
await context.GetRequiredService<IExceptionNotifier>().NotifyAsync(new ExceptionNotificationContext(context.Exception)); |
|
||||
context.HttpContext.Response.StatusCode = 200; |
|
||||
var result = SimplifyMessage(context); |
|
||||
context.Result = new ObjectResult(result); |
|
||||
context.Exception = null; //Handled!
|
|
||||
} |
|
||||
|
|
||||
private WrapResult<object> SimplifyMessage(ExceptionContext context) |
|
||||
{ |
|
||||
var result = new WrapResult<object>(); |
|
||||
var localizer = context.GetService<IStringLocalizer<AbpProResource>>(); |
|
||||
switch (context.Exception) |
|
||||
{ |
|
||||
case AbpAuthorizationException: |
|
||||
result.SetFail("权限不足", 401); |
|
||||
break; |
|
||||
case AbpValidationException: |
|
||||
result.SetFail("请求参数验证失败", 400); |
|
||||
break; |
|
||||
case EntityNotFoundException: |
|
||||
result.SetFail("实体不存在", 506); |
|
||||
break; |
|
||||
case NotImplementedException: |
|
||||
result.SetFail("未实现功能", 507); |
|
||||
break; |
|
||||
default: |
|
||||
{ |
|
||||
if (context.Exception is IHasErrorCode codeException) |
|
||||
{ |
|
||||
result.SetFail(localizer[codeException.Code]); |
|
||||
foreach (var key in context.Exception.Data.Keys) |
|
||||
{ |
|
||||
result.SetFail(result.Message.Replace("{" + key + "}", context.Exception.Data[key]?.ToString())); |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
result.SetFail(context.Exception.Message); |
|
||||
} |
|
||||
|
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return result; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,6 +0,0 @@ |
|||||
namespace Lion.AbpPro.Extensions.System |
|
||||
{ |
|
||||
public class DontWrapResultAttribute : Attribute |
|
||||
{ |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,87 @@ |
|||||
|
using System.Text; |
||||
|
|
||||
|
namespace Microservices.Microsoft.AspNetCore.Mvc.Filters; |
||||
|
|
||||
|
public sealed class LionExceptionFilter : IAsyncExceptionFilter, ITransientDependency |
||||
|
{ |
||||
|
public async Task OnExceptionAsync(ExceptionContext context) |
||||
|
{ |
||||
|
if (!ShouldHandleException(context)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
await HandleAndWrapException(context); |
||||
|
} |
||||
|
|
||||
|
private bool ShouldHandleException(ExceptionContext context) |
||||
|
{ |
||||
|
if (context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.GetCustomAttributes(typeof(WrapResultAttribute), true).Any()) |
||||
|
{ |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
if (context.ActionDescriptor.GetMethodInfo().GetCustomAttributes(typeof(WrapResultAttribute), true).Any()) |
||||
|
{ |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
private async Task HandleAndWrapException(ExceptionContext context) |
||||
|
{ |
||||
|
var exceptionHandlingOptions = context.GetRequiredService<IOptions<AbpExceptionHandlingOptions>>().Value; |
||||
|
var exceptionToErrorInfoConverter = context.GetRequiredService<IExceptionToErrorInfoConverter>(); |
||||
|
var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception, options => |
||||
|
{ |
||||
|
options.SendExceptionsDetailsToClients = exceptionHandlingOptions.SendExceptionsDetailsToClients; |
||||
|
options.SendStackTraceToClients = exceptionHandlingOptions.SendStackTraceToClients; |
||||
|
}); |
||||
|
|
||||
|
var logLevel = context.Exception.GetLogLevel(); |
||||
|
|
||||
|
var remoteServiceErrorInfoBuilder = new StringBuilder(); |
||||
|
remoteServiceErrorInfoBuilder.AppendLine($"---------- {nameof(RemoteServiceErrorInfo)} ----------"); |
||||
|
remoteServiceErrorInfoBuilder.AppendLine(context.GetRequiredService<IJsonSerializer>().Serialize(remoteServiceErrorInfo, indented: true)); |
||||
|
|
||||
|
var logger = context.GetService<ILogger<LionExceptionFilter>>(NullLogger<LionExceptionFilter>.Instance); |
||||
|
|
||||
|
logger.LogWithLevel(logLevel, remoteServiceErrorInfoBuilder.ToString()); |
||||
|
|
||||
|
logger.LogException(context.Exception, logLevel); |
||||
|
|
||||
|
await context.GetRequiredService<IExceptionNotifier>().NotifyAsync(new ExceptionNotificationContext(context.Exception)); |
||||
|
context.HttpContext.Response.StatusCode = 200; |
||||
|
var result = SimplifyMessage(context); |
||||
|
context.Result = new ObjectResult(result); |
||||
|
context.Exception = null; //Handled!
|
||||
|
} |
||||
|
|
||||
|
private WrapResult<object> SimplifyMessage(ExceptionContext context) |
||||
|
{ |
||||
|
var result = new WrapResult<object>(); |
||||
|
switch (context.Exception) |
||||
|
{ |
||||
|
case AbpAuthorizationException: |
||||
|
result.SetFail("权限不足", 401); |
||||
|
break; |
||||
|
case AbpValidationException: |
||||
|
result.SetFail("请求参数验证失败", 400); |
||||
|
break; |
||||
|
case EntityNotFoundException: |
||||
|
result.SetFail("实体不存在", 506); |
||||
|
break; |
||||
|
case NotImplementedException: |
||||
|
result.SetFail("未实现功能", 507); |
||||
|
break; |
||||
|
default: |
||||
|
{ |
||||
|
result.SetFail(context.Exception.Message); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
namespace Microservices.Microsoft.AspNetCore.Mvc.Filters; |
||||
|
|
||||
|
public class LionResultFilter : IResultFilter, ITransientDependency |
||||
|
{ |
||||
|
public void OnResultExecuting(ResultExecutingContext context) |
||||
|
{ |
||||
|
// 如果是page 直接return
|
||||
|
if (context.ActionDescriptor.IsPageAction()) return; |
||||
|
|
||||
|
var controllerHasDontWrapResultAttribute = context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.GetCustomAttributes(typeof(WrapResultAttribute), true).Any(); |
||||
|
var controllerActionHasDontWrapResultAttribute = context.ActionDescriptor.GetMethodInfo().GetCustomAttributes(typeof(WrapResultAttribute), true).Any(); |
||||
|
if (controllerHasDontWrapResultAttribute || controllerActionHasDontWrapResultAttribute) |
||||
|
{ |
||||
|
context.HttpContext.Response.StatusCode = 200; |
||||
|
var result = new WrapResult<object>(); |
||||
|
if (context.Result is not EmptyResult) |
||||
|
{ |
||||
|
result.SetSuccess(((ObjectResult)context.Result).Value); |
||||
|
} |
||||
|
|
||||
|
context.Result = new ContentResult() |
||||
|
{ |
||||
|
StatusCode = (int)HttpStatusCode.OK, |
||||
|
ContentType = "application/json;charset=utf-8", |
||||
|
Content = JsonConvert.SerializeObject(result) |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void OnResultExecuted(ResultExecutedContext context) |
||||
|
{ |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue