From 0401e97ed3920e83f91bfd6bd6a21c7af7a7718d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B7=B3?= Date: Sat, 15 Apr 2023 14:36:48 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AE=8C=E6=88=90=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Exceptions/AuthException.cs | 16 ++++-- .../Exceptions/BusinessException.cs | 17 +++--- .../DbContexts/DefaultDbContext.cs | 12 ---- .../Yi.Furion.Rbac.Web.Core/Startup.cs | 2 +- .../YiRESTfulResult.cs | 14 ----- .../YiRESTfulResultProvider.cs | 57 ------------------- 6 files changed, 20 insertions(+), 98 deletions(-) delete mode 100644 Yi.Furion.Rbac/Yi.Furion.Rbac.EntityFramework.Core/DbContexts/DefaultDbContext.cs delete mode 100644 Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResult.cs delete mode 100644 Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResultProvider.cs diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/AuthException.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/AuthException.cs index b4959d8a..ced77a07 100644 --- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/AuthException.cs +++ b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/AuthException.cs @@ -1,10 +1,12 @@ using System.Runtime.Serialization; +using Furion.FriendlyException; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Yi.Framework.Infrastructure.Enums; namespace Yi.Framework.Infrastructure.Exceptions { - public class AuthException : Exception, + public class AuthException : AppFriendlyException, IHasErrorCode, IHasErrorDetails, IHasLogLevel @@ -27,6 +29,12 @@ namespace Yi.Framework.Infrastructure.Exceptions Code = (int)code; Details = details; LogLevel = logLevel; + + + base.ErrorCode = code; + base.StatusCode = StatusCodes.Status401Unauthorized; + base.ErrorMessage = $"{message}{(details is not null ? ":" + details : "")}"; + base.ValidationException = true; } /// @@ -38,11 +46,7 @@ namespace Yi.Framework.Infrastructure.Exceptions } - public AuthException WithData(string name, object value) - { - Data[name] = value; - return this; - } + } } diff --git a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/BusinessException.cs b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/BusinessException.cs index 2bcc847a..2a6d12aa 100644 --- a/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/BusinessException.cs +++ b/Yi.Furion.Rbac/Yi.Framework.Infrastructure/Exceptions/BusinessException.cs @@ -1,10 +1,13 @@ -using System.Runtime.Serialization; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Furion.FriendlyException; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Yi.Framework.Infrastructure.Enums; namespace Yi.Framework.Infrastructure.Exceptions { - public class BusinessException : Exception, + public class BusinessException : AppFriendlyException, IHasErrorCode, IHasErrorDetails, IHasLogLevel @@ -26,6 +29,10 @@ namespace Yi.Framework.Infrastructure.Exceptions Code = code; Details = details; LogLevel = logLevel; + base.ErrorCode= code; + base.StatusCode = StatusCodes.Status403Forbidden; + base.ErrorMessage = $"{message}{(details is not null? ":"+details:"")}"; + base.ValidationException = true; } /// @@ -37,11 +44,5 @@ namespace Yi.Framework.Infrastructure.Exceptions } - public BusinessException WithData(string name, object value) - { - Data[name] = value; - return this; - } - } } diff --git a/Yi.Furion.Rbac/Yi.Furion.Rbac.EntityFramework.Core/DbContexts/DefaultDbContext.cs b/Yi.Furion.Rbac/Yi.Furion.Rbac.EntityFramework.Core/DbContexts/DefaultDbContext.cs deleted file mode 100644 index 782dd7f3..00000000 --- a/Yi.Furion.Rbac/Yi.Furion.Rbac.EntityFramework.Core/DbContexts/DefaultDbContext.cs +++ /dev/null @@ -1,12 +0,0 @@ -//using Furion.DatabaseAccessor; -//using Microsoft.EntityFrameworkCore; - -//namespace Yi.Furion.Rbac.EntityFramework.Core; - -//[AppDbContext("Yi.Furion.Rbac", DbProvider.Sqlite)] -//public class DefaultDbContext : AppDbContext -//{ -// public DefaultDbContext(DbContextOptions options) : base(options) -// { -// } -//} diff --git a/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/Startup.cs b/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/Startup.cs index 3ff1ae2a..f61a982f 100644 --- a/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/Startup.cs +++ b/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/Startup.cs @@ -16,7 +16,7 @@ public class Startup : AppStartup services.AddCorsAccessor(); - services.AddControllers().AddInject(); + services.AddControllers().AddInjectWithUnifyResult(); services.AddEventBus(); } diff --git a/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResult.cs b/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResult.cs deleted file mode 100644 index 2991c252..00000000 --- a/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResult.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.Furion.Rbac.Web.Core -{ - public class YiRESTfulResult - { - - public YiRESTfulResult() { } - } -} diff --git a/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResultProvider.cs b/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResultProvider.cs deleted file mode 100644 index 4c890e73..00000000 --- a/Yi.Furion.Rbac/Yi.Furion.Rbac.Web.Core/YiRESTfulResultProvider.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Furion; -using Furion.DataValidation; -using Furion.FriendlyException; -using Furion.UnifyResult; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Filters; - -namespace Yi.Furion.Rbac.Web.Core -{ - [UnifyModel(typeof(YiRESTfulResult<>))] - public class YiRESTfulResultProvider : IUnifyResultProvider - { - public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) - { - return new JsonResult(new YiRESTfulResult() - , UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用 - } - - public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings = null) - { - UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings); - - switch (statusCode) - { - // 处理 401 状态码 - case StatusCodes.Status401Unauthorized: - await context.Response.WriteAsJsonAsync(new YiRESTfulResult() - , App.GetOptions()?.JsonSerializerOptions); - break; - // 处理 403 状态码 - case StatusCodes.Status403Forbidden: - await context.Response.WriteAsJsonAsync(new YiRESTfulResult() - , App.GetOptions()?.JsonSerializerOptions); - break; - default: break; - } - } - - public IActionResult OnSucceeded(ActionExecutedContext context, object data) - { - return new JsonResult(new YiRESTfulResult() - , UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用 - } - - public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) - { - return new JsonResult(new YiRESTfulResult() - , UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用 - } - } -}