6K Star 11.8K Fork 4K

GVPdotNET China / Furion

 / 详情

📝 支持特定接口可配置独立的序列化规范化配置

已完成
拥有者
创建于  
2022-09-14 11:59

功能描述

在过去,接口只能应用全局的规范化或者特定接口不启用规范化处理,但随着业务需求越来越复杂,对接的第三方越来越多,那么就需要多套自定义规范化结果的机制。

相关资料

#I38L9B:如何设置某一个接口响应数据不自动转小写,按原始字段名返回。

#I51WLX:关于规范返回结果,能否改为AOP形式在过滤器上实现

#I5FII8:支持多套规范化结果功能

功能清单

  • 支持特别接口自定义规范化序列化配置选项
  • 支持特别接口应用全新的一套规范化处理
  • 编写更新日志内容

期望效果

  • 注册可添加多套规范化配置
// 替换默认的
services.AddUnifyProvider<SpeciallyResultProvider>();

// 添加更多规范化配置
services.AddUnifyProvider<SpeciallyResultProvider>("unique_name");
  • 在类或方法中使用
[UnifyProvider]    // 默认的(不贴也是默认的)
public class FurionAppService: IDynamicApiController
{
}

[UnifyProvider("specially")]    // 自定义的
public class FurionAppService: IDynamicApiController
{
}


[UnifyProvider]    // 默认的
public class FurionAppService: IDynamicApiController
{
    [UnifyProvider("specially")] // 复写默认的
    public string GetName()
    {
    }
}
  • 配置 JsonResult 的序列化
public IActionResult OnSucceeded(ActionExecutedContext context, object data)
{
    return new JsonResult(RESTfulResult(StatusCodes.Status200OK, true, data), new JsonSerializerOptions { ... });
}

测试案例

services.AddUnifyProvider<SpeciallyResultProvider>("specially");

[UnifyModel(typeof(MyResult<>))]
public class SpeciallyResultProvider : IUnifyResultProvider
{
    public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)
    {
        return new ContentResult() { Content = "异常啦" };
    }

    public IActionResult OnSucceeded(ActionExecutedContext context, object data)
    {
        return new ContentResult() { Content = "成功啦" };
    }

    public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
    {
        return new ContentResult() { Content = "失败啦" };
    }

    public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)
    {
        await Task.CompletedTask;
    }
}

public class MyResult<T>
{
    /// <summary>
    /// 数据
    /// </summary>
    public T Data { get; set; }
}
public class TestUnifyProvider : IDynamicApiController
{
    public string DefaultUnify()
    {
        return "test";
    }

    [UnifyProvider]
    public string DefaultUnify2()
    {
        return "test";
    }

    [UnifyProvider("specially")]
    public string SpeciallyUnify()
    {
        return "特别";
    }
}

输入图片说明

输入图片说明

代码实现

!571: 支持特定接口可配置独立的序列化规范化配置

评论 (1)

百小僧 创建了任务
百小僧 负责人设置为百小僧
百小僧 修改了描述
百小僧 添加了
 
优化
标签
百小僧 添加了
 
新功能
标签
百小僧 添加了
 
重大调整
标签
百小僧 里程碑设置为v4.4.4
百小僧 关联分支设置为v4
百小僧 计划截止日期设置为2022-09-15
百小僧 计划开始日期设置为2022-09-14
百小僧 计划截止日期2022-09-15 修改为2022-09-14
百小僧 计划截止日期2022-09-14 修改为2022-09-19
百小僧 置顶等级设置为
百小僧 优先级设置为严重
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 通过dotnetchina/Furion Pull Request !571任务状态待办的 修改为已完成
百小僧 置顶等级 修改为不置顶
展开全部操作日志

两年来首次重构规范化处理模块。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助