25 changed files with 359 additions and 325 deletions
@ -1,92 +1,92 @@ |
|||
<Project> |
|||
<ItemGroup> |
|||
<PackageReference Update="Volo.Abp.Autofac" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Json" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Validation" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Ddd.Domain" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AutoMapper" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.ObjectMapping" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.AspNetCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Caching" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.BlobStoring.Aliyun" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.HangFire" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.SignalR" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TestBase" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.MySQL" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Account.Web" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Caching.StackExchangeRedis" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.PostgreSql" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Serilog" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Swashbuckle" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Ddd.Application" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Ddd.Application.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Authorization" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Dapper" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Http.Client" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.MongoDB" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.Sqlite" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Http.Client.IdentityModel" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.MultiTenancy" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Account.Application" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Application" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Application" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Application" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Application" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Application" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.ObjectExtending" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Account.Application.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Application.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Application.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Application.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Application.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Application.Contracts" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Emailing" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Identity" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AuditLogging.Domain" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Domain" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Domain" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Domain" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Domain" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Domain.Shared" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain.Shared" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AuditLogging.Domain.Shared" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Domain.Shared" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Domain.Shared" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Shared" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Domain.Shared" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Account.HttpApi" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.HttpApi" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Account.HttpApi.Client" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Identity.HttpApi.Client" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi.Client" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi.Client" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi.Client" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi.Client" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Core" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.TestBase" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.EventBus.Kafka" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.EventBus" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Kafka" Version="5.3.4"/> |
|||
<PackageReference Update="Volo.Abp.Autofac" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Json" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Validation" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Ddd.Domain" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AutoMapper" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.ObjectMapping" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.AspNetCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Caching" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.BlobStoring.Aliyun" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.HangFire" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.SignalR" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TestBase" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.MySQL" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Account.Web" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Caching.StackExchangeRedis" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.PostgreSql" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Serilog" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Swashbuckle" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Ddd.Application" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Ddd.Application.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Authorization" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Dapper" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Http.Client" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.MongoDB" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore.Sqlite" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Http.Client.IdentityModel" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.MultiTenancy" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Account.Application" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Application" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Application" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Application" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Application" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Application" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.ObjectExtending" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Account.Application.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Application.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Application.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Application.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Application.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Application.Contracts" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Emailing" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Identity" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AuditLogging.Domain" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Domain" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Domain" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Domain" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Domain" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.Domain.Shared" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.BackgroundJobs.Domain.Shared" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AuditLogging.Domain.Shared" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.Domain.Shared" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.Domain.Shared" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.Domain.Shared" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.Domain.Shared" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Account.HttpApi" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.HttpApi" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Account.HttpApi.Client" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Identity.HttpApi.Client" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.PermissionManagement.HttpApi.Client" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.TenantManagement.HttpApi.Client" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.FeatureManagement.HttpApi.Client" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.SettingManagement.HttpApi.Client" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Core" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.EntityFrameworkCore" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.TestBase" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.EventBus.Kafka" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.EventBus" Version="6.0.1"/> |
|||
<PackageReference Update="Volo.Abp.Kafka" Version="6.0.1"/> |
|||
</ItemGroup> |
|||
</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