翼度科技»论坛 编程开发 .net 查看内容

.net core 自定义规范响应的中间件

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
在本文中,我们将介绍如何使用 .NET Core 中的中间件来自定义规范响应,以便在 API 调用时返回统一的格式和错误信息。中间件是一种可以在请求和响应管道中执行逻辑的软件组件,它可以对请求或响应进行修改、拦截或处理。我们将使用一个简单的示例来演示如何创建和使用自定义规范响应的中间件。
首先,我们需要创建一个类来表示规范响应的格式,这个类可以包含以下属性:

  • Code:响应的状态码,例如 200 表示成功,400 表示客户端错误,500 表示服务器错误等。
  • Message:响应的消息,例如 "OK" 表示成功,"Bad Request" 表示客户端错误,"Internal Server Error" 表示服务器错误等。
  • Data:响应的数据,可以是任意类型的对象,例如用户信息、产品列表、订单详情等。
这个类的代码如下:
  1. public class ApiResponse
  2. {
  3.     public bool Success { get; set; }
  4.     public string Message { get; set; }
  5.     public object Data { get; set; }
  6.     public ApiResponse(bool success, string message, object data)
  7.     {
  8.         Success = success;
  9.         Message = message;
  10.         Data = data;
  11.     }
  12.     public ApiResponse(bool success, string message)
  13.         : this(success, message, null)
  14.     {
  15.     }
  16.     public ApiResponse(bool success)
  17.         : this(success, null, null)
  18.     {
  19.     }
  20. }
复制代码
中间件

接下来,我们需要创建一个中间件类来实现自定义规范响应的逻辑,这个类需要有以下特点:

  • 接收一个 RequestDelegate 类型的参数,表示下一个中间件或终端处理程序。
  • 实现一个 InvokeAsync 方法,接收一个 HttpContext 类型的参数,表示当前请求的上下文。
  • 在 InvokeAsync 方法中,使用 await next(context) 来调用下一个中间件或终端处理程序,并获取其返回的响应。
  • 在 InvokeAsync 方法中,根据响应的状态码和内容来构造一个 ApiResponse对象,并将其序列化为 JSON 格式。
  • 在 InvokeAsync 方法中,修改响应的内容类型为 application/json,并将 JSON 格式的 ApiResponse写入到响应体中。
  • GetStatusCodeMessage()根据响应状态给出信息
  • GetResponseData()获取其返回的响应
CustomResponseMiddleware

[code]public class CustomResponseMiddleware{    private readonly RequestDelegate _next;    public CustomResponseMiddleware(RequestDelegate next)    {        _next = next;    }    public async Task InvokeAsync(HttpContext context)    {        var originalBodyStream = context.Response.Body;        using (var responseBody = new MemoryStream())        {            context.Response.Body = responseBody;            await _next(context);            if (context.Response.StatusCode >= 400 && context.Response.StatusCode

举报 回复 使用道具