【个人博客搭建】(24)统一api接口返回格式

统一接口的返回格式是为了方便开发的数据对接。

在现如今前后端分离的趋势下,需要对接各种类型的数据

所以,我们需要一个标准的数据格式。

1、定义数据格式:例如下边就是一个常见的格式

{"succeed":true,"code": 200,"message": "请求成功","data": {// 实际的数据内容}
}

 2、定义类(ps:这里的类字段名与上边的返回不一样)

    public class ApiResult{/// <summary>/// 是否成功/// </summary>public bool isSuccess { get; set; }/// <summary>/// 状态码/// </summary>public int code { get; set; }/// <summary>/// 返回数据集合/// </summary>public object data { get; set; }/// <summary>/// 显示信息/// </summary>public string msg { get; set; }}

3、

        3.1、方法一:使用IActionFilter。

具体也可以看官方的文档:
    https://learn.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-8.0

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;    public class GlobalActionFilter : IActionFilter{public void OnActionExecuting(ActionExecutingContext context){// Do something before the action executes.}public void OnActionExecuted(ActionExecutedContext context){// Do something after the action executes.var result = context.Result as Microsoft.AspNetCore.Mvc.ObjectResult;try{context.Result = new OkObjectResult(new ApiResult{isSuccess= true,code= 200,errors = null,data = result });}catch (Exception ex){}}}

        3.2、方法二:创建中间件:

    //1、创建类public class ApiResponseMiddleware{private readonly RequestDelegate _next;public ApiResponseMiddleware(RequestDelegate next){_next = next;}public async Task InvokeAsync(HttpContext context){var originalResponseBody = context.Response.Body;try{using var memStream = new MemoryStream();context.Response.Body = memStream;await _next(context);memStream.Seek(0, SeekOrigin.Begin);var responseStream = memStream.ToArray();var responseContent = Encoding.UTF8.GetString(responseStream);var resultObject = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(responseContent);var apiResponse = new ApiResult{isSuccess= true,code= context.Response.StatusCode,msg= "Success",data = resultObject};context.Response.ContentType = "application/json";context.Response.Body = originalResponseBody;var json = Newtonsoft.Json.JsonConvert.SerializeObject(apiResponse); ;await context.Response.WriteAsync(json);}finally{context.Response.Body = originalResponseBody;}}}
//2、注入服务:
app.UseMiddleware<ApiResponseMiddleware>();
//尽量靠前,放某些后边,测试调试会不进入。

        3.3、其他。上边两种方式是不建议一起使用的。

个人目前测试同时使用的话,方法一的执行会嵌入到方法二中

大概就是方法一格式了一次后,到方法二后再格式一次。

4、其他:

        4.1、按方法一的官方文档,还可以拓展成特性的形式,对需要的加格式。(也可以取反,比如设置那些不需要格式化,其他默认都带。)

        4.2、另外在:

https://learn.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-8.0

还有其他的过滤器,例如:IResultFilter。

可以拓展看看这三个的执行顺序,考虑服务注册的顺序,看看实际的执行效果如何。

        4.3、我们如果在Action中就统一用ApiResult<T>作为格式,但是前端的字段名不同,也可以用改方式进行字段转化。或者让前端改?O(∩_∩)O哈哈~

如果是两套不同的开源 项目,还是后端改方便吧。

好了,今天的这个分享就到这里了,感兴趣的可以点赞、收藏、加关注~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法——动态规划(从dfs回溯开始推导dp)】

基础理论 递归&#xff1a; 递&#xff1a;大问题分解子问题的过程 &#xff1b; 归&#xff1a;产生答案 dp&#xff1a;只进行归&#xff1b;用已知的最底层的&#xff08;递归的边界&#xff0c;搜索树的底&#xff09;&#xff0c;推出未知 《视频索引》 一句话&…

TDengine数据迁移

前言 taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。 taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份&#xff0c;也可以对数据库、超级 表和普通表中指定时间段内的数据记录…

蓝牙BLE上位机工具开发理论线索梳理_5.Windows WinRT API包Microsoft.Windows.SDK.Contracts

1. WinRT API包介绍 本文介绍下Windows WinRT API包&#xff08;Microsoft.Windows.SDK.Contracts&#xff09;&#xff0c; 如图1是SDK包的描述。 图1 Microsoft.Windows.SDK.Contracts Windows WinRT API包使您能够将最新的Windows运行时API支持添加到您的。net Framework 4.…

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果(地图探测、地图窥探)

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 探测效果&#xff08;地图探测、地图窥探&#xff09; 实现原理 ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类&#xff0c;可以添加数据以及操作 FBO&#xff08;ManagedFBO&#xff09;&#xf…

媲美Sora,免费使用!带物理模拟的,文生视频模型

6月13日&#xff0c;知名3D建模平台Luma AI发布最新文生视频模型Dream Machine&#xff0c;向所有用户免费开放使用。 Dream Machine除了支持文本之外&#xff0c;还可使用图片作为引导来生成视频&#xff0c;其生成的视频质量、动作一致性、色彩、光影、饱和度、运镜等方面&a…

Mysql学习笔记-进阶篇

一、存储引擎 1、MYSQL体系结构 连接层、服务层、引擎层、存储层&#xff1b; 2、存储引擎简介 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的&#xff0c;而不是库的&#xff0c;所以存储引擎也可被称为表类型。 1&#xff09;在创…

golang闭包

【1】什么是闭包&#xff1a; 闭包就是一个函数和与其相关的引用环境组合的一个整体 【2】案例展示&#xff1a; package main import "fmt" //函数功能&#xff1a;求和 //函数的名字&#xff1a;getSum 参数为空 //getSum函数返回值为一个函数&#xff0c;这个函…

[工具探索]英寸vs毫米下常见尺寸排版

文章目录 常见尺寸1. 照片尺寸2. 纸张尺寸3. 显示器和电视屏幕尺寸4. 手机屏幕尺寸5. 笔记本电脑屏幕尺寸6. 其他设备尺寸 换算公式换算方法常见照片尺寸对比表国际标准ISO&#xff08;216&#xff09;纸张尺寸 什么是英寸&#xff1f; 英寸&#xff08;英语&#xff1a;inch&a…

Hutool有哪些常用方法

Hutool是一个Java工具类库&#xff0c;它提供了很多方便的方法来简化Java开发。以下是一些Hutool的常用方法及其示例&#xff1a; 一、日期时间处理 DateUtil.format(Date date, String pattern): 格式化日期。 // 代码如下 Date date new Date(); String format DateUtil…

计算机组成原理 期末复习笔记整理(上)(个人复习笔记/侵删/有不足之处欢迎斧正)

零、计算机的发展 冯.诺依曼计算机的特点: 1.计算机由五大部件组成 2.指令和数据以同等地位存于存储器&#xff0c;可按地址寻访 3.指令和数据用二进制表示 4.指令由操作码和地址码组成 5.存储程序&#xff08;首次提出存储结构&#xff09; 6.以运算器为中心&#xff08;现代…

水泥行业超低排放简介

在当今社会&#xff0c;随着环保意识的不断提高&#xff0c;水泥行业作为重要的工业领域&#xff0c;其超低排放的实施范围及成效日益受到人们的关注。朗观视觉小编将从多个角度探讨水泥行业超低排放的实施范围&#xff0c;分析其背后的意义与影响&#xff0c;展望未来的发展趋…

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版?

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版&#xff1f; 书接上文&#xff1a; ONLYOFFICE 协作空间服务器如何一键安装自托管私有化部署 讲的是如何把ONLYOFFICE协作空间服务器部署到自托管云服务器VPS上面&#xff0c;这里继续&#xff0c;在自己Windows电…

c++ 智能指针使用注意事项及解决方案

c11智能指针 shared_ptr介绍注意事项示例解决方案 weak_ptr特点示例 unique_ptr特点示例 shared_ptr 介绍 shared_ptr 是一种智能指针&#xff0c;用于自动管理动态分配的对象的生命周期。它通过引用计数机制来确保当最后一个 shared_ptr 指向一个对象时&#xff0c;该对象会…

【C++ | 移动构造函数】一文了解C++11的 移动构造函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-12 2…

[深度学习]使用python转换pt并部署yolov10的tensorrt模型封装成类几句完成目标检测加速任务

【简单介绍】 使用Python将YOLOv10模型从PyTorch格式&#xff08;.pt&#xff09;转换为TensorRT格式&#xff0c;并通过封装成类来实现目标检测加速任务&#xff0c;是一个高效且实用的流程。以下是该过程的简要介绍&#xff1a; 模型转换&#xff1a; 利用官方提供导出命令…

浅谈网络通信(2)

文章目录 一、TCP1.1、TCP提供的api —— ServerSocket 、Socket1.2、使用TCP协议编写回显服务器1.3、长/短连接 二、应用层协议、传输层协议详解2.1、应用层(后端开发必知必会)2.1.1、自定义应用层协议2.1.2、通用的协议格式2.1.2.1、XML2.1.2.2、json2.1.2.3、protobuffer 2.…

Protected and unprotected Meilisearch projects(/health)

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

02通讯录管理系统——创建项目

创建项目步骤如下&#xff1a; 1.创建新项目 2.添加文件 2.1创建项目 打开vs2019后&#xff0c;点击创建新项目&#xff0c;创建新的C项目 填写项目名称&#xff0c;选择路径 2.2添加文件 添加成功后&#xff0c;效果如图

Jira的原理及应用详解(六)

本系列文章简介&#xff1a; 在当今快速发展的软件开发和项目管理领域&#xff0c;有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具&#xff0c;以其强大的功能、灵活的定制性以及卓越的用户体验&#xff0c;赢得了全球众多…

【QT5】<知识点> QT串口编程

目录 前言 一、串口编程步骤 0. 添加串口模块 1. 自动搜索已连接的串口 2. 创建串口对象 3. 初始化串口 4. 打开串口 5. 关闭串口 6. 发送数据 7. 接收数据 二、简易串口助手 1. 实现效果 2. 程序源码 3. 实现效果二 前言 本篇记录QT串口编程相关内容&#xff0…