diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index 5f3f2b534..e58520638 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -2,7 +2,9 @@ using IRaCIS.Core.Application.BusinessFilter; using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.MassTransit.Consumer; +using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.Service.BackGroundJob; +using IRaCIS.Core.Application.Service.BusinessFilter; using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure.Extention; using LogDashboard; @@ -11,6 +13,7 @@ using MassTransit.NewIdProviders; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -92,7 +95,6 @@ builder.Services.AddControllers(options => options.Filters.Add(); options.Filters.Add(); options.Filters.Add(); - //options.Filters.Add(10); options.Filters.Add(); @@ -141,11 +143,14 @@ builder.Services.AddMasaMinimalAPIs(options => //options.Assemblies = new List() { typeof(UserSiteSurveySubmitedEventConsumer).Assembly }; options.GetPrefixes = new List { "Get", "Select", "Find" }; - options.PostPrefixes = new List { "Post", "Add", "Create" }; - options.PutPrefixes = new List { "Put", /*"Update"*/ }; + options.PostPrefixes = new List { "Post", "Add", "Create", "List" }; + options.PutPrefixes = new List { "Put", "Update" }; options.DeletePrefixes = new List { "Delete", "Remove" }; - + options.RouteHandlerBuilder= t=> { + t.RequireAuthorization().AddEndpointFilter(); + }; + options.DisableTrimMethodPrefix = true; //禁用去除方法前缀 options.DisableAutoMapRoute = false;//可通过配置true禁用全局自动路由映射或者删除此配置以启用全局自动路由映射 }); diff --git a/IRaCIS.Core.Application/BaseService.cs b/IRaCIS.Core.Application/BaseService.cs index bc6b531e0..78b6f1e5a 100644 --- a/IRaCIS.Core.Application/BaseService.cs +++ b/IRaCIS.Core.Application/BaseService.cs @@ -2,42 +2,30 @@ using IRaCIS.Core.Application.Service.BusinessFilter; using IRaCIS.Core.Domain.Share; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; - using Panda.DynamicWebApi; using Panda.DynamicWebApi.Attributes; using System.Diagnostics.CodeAnalysis; -namespace IRaCIS.Core.Application.Service +namespace IRaCIS.Core.Application.Service; + + + + + +[TypeFilter(typeof(UnifiedApiResultFilter))] +[Authorize, DynamicWebApi] +public class BaseService : IDynamicWebApi { -#pragma warning disable CS8618 - - #region 非泛型版本 - - [TypeFilter(typeof(UnifiedApiResultFilter))] - [Authorize, DynamicWebApi] - public class BaseService : IBaseService, IDynamicWebApi + public static IResponseOutput Null404NotFound(TEntity? businessObject) where TEntity : class { - - - public static IResponseOutput Null404NotFound(TEntity? businessObject) where TEntity : class - { - return new ResponseOutput() - .NotOk($"The query object {typeof(TEntity).Name} does not exist , or was deleted by someone else, or an incorrect parameter query caused", code: ApiResponseCodeEnum.DataNotExist); - } + return new ResponseOutput() + .NotOk($"The query object {typeof(TEntity).Name} does not exist , or was deleted by someone else, or an incorrect parameter query caused", code: ApiResponseCodeEnum.DataNotExist); } - - - public interface IBaseService - { - - - - } - #endregion - } + diff --git a/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs b/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs index b8a4977f8..320d80803 100644 --- a/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs @@ -1,10 +1,13 @@ using IRaCIS.Core.Domain.Share; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Logging; namespace IRaCIS.Core.Application.Service.BusinessFilter; + +#region 控制器流程 /// /// 统一返回前端数据包装,之前在控制器包装,现在修改为动态Api 在ResultFilter这里包装,减少重复冗余代码 /// by zhouhang 2021.09.12 周末 @@ -120,3 +123,59 @@ public class UnifiedApiResultFilter : Attribute, IAsyncResultFilter return false; } } +#endregion + + +#region minimalapi 流程 + + +public class UnifiedApiResultEndpointFilter : IEndpointFilter +{ + private readonly ILogger _logger; + + public UnifiedApiResultEndpointFilter(ILogger logger) + { + _logger = logger; + } + + public async ValueTask InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next) + { + // 调用下一个过滤器或端点处理程序 + var result = await next(context); + + // 检查返回值类型 + if (result is null) + { + return ResponseOutput.NotOk("No data found."); // 处理 null 返回 + } + + // 如果返回的是元组 + if (result is ValueTuple tuple) + { + return ResponseOutput.Ok(tuple.Item1, tuple.Item2); + } + + if (result is IResponseOutput) + { + return result; + } + + // 对于其他情况,直接返回结果 + return ResponseOutput.Ok(result); + } + + private IResponseOutput WrapResponse(object? value) + { + // 处理元组的情况 + if (value is ValueTuple tuple) + { + return ResponseOutput.Ok(tuple.Item1, tuple.Item2); + } + + // 包装单个对象 + return ResponseOutput.Ok(value); + } +} + +#endregion + diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index e74a68289..c05961eb5 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -9532,6 +9532,16 @@ + + + 导出标识 + + + + + 导出结果 + + 分组 @@ -10132,6 +10142,16 @@ 图片数量 + + + 导出标识 + + + + + 导出结果 + + 数值类型 @@ -10327,6 +10347,16 @@ Id + + + 导出标识 + + + + + 导出结果 + + 高亮问题的答案 diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index 45d23323a..662e23223 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -3,6 +3,7 @@ using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.BusinessFilter; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Helper; +using IRaCIS.Core.Application.Service.BusinessFilter; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain; using IRaCIS.Core.Domain.Share; @@ -34,39 +35,32 @@ namespace IRaCIS.Core.Application.Service { /// /// minimal api 测试 + /// 学习参考文档:http://fanrk.cn/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/MinimalApi/MinimalApi.html + /// 组件参考文档:https://docs.masastack.com/framework/building-blocks/minimal-apis#section-69828ff0 /// [ApiExplorerSettings(GroupName = "Institution")] + public class TestMinimalApiService : ServiceBase { + public TestMinimalApiService() { - RouteHandlerBuilder = t => { - t.WithOpenApi(); - }; + RouteHandlerBuilder = t => + { + t.RequireAuthorization().WithGroupName("Institution").AddEndpointFilter(); + }; } - [RoutePattern(HttpMethod = "post")] public Task> GetProjectList1Async() { var list = new List() - { - "Auth", - "DCC", - "PM" - }; + { + "Auth", + "DCC", + "PM" + }; return Task.FromResult(list); } - - public List GetProjectList() - { - var list = new List() - { - "Auth", - "DCC", - "PM" - }; - return list; - } }