NET Core API 实现全局统一的数据返回格式

B站影视 2025-02-09 09:02 3

摘要:RESTful API:REST(Representational State Transfer)是一种基于 HTTP 协议的网络应用程序的架构风格。RESTful API 是一种设计风格,用于创建具有统一接口的 Web 服务。通过定义资源(资源的 URL)、

在.NET Core API中实现全局统一的数据返回格式,可以通过自定义中间件或使用ActionFilter来实现。

RESTful API:REST(Representational State Transfer)是一种基于 HTTP 协议的网络应用程序的架构风格。RESTful API 是一种设计风格,用于创建具有统一接口的 Web 服务。通过定义资源(资源的 URL)、操作(HTTP 方法)和表示(数据格式),RESTful API 提供了一种简单而有效的方法来处理接口请求。

定义一个标准的返回数据格式类(如ApiResponse),并使用泛型以支持不同类型的数据返回。///
/// API响应结果类,用于统一API的返回格式
///
/// 返回数据的类型
publicclassApiResponse
{
///
/// 请求是否成功
///
publicboolSuccess { get; set; }

///
/// 响应状态码
///
publicintCode { get; set; }

///
/// 响应消息
///
publicstringMessage { get; set; }

///
/// 返回的数据
///
public T Data { get; set; }

}

创建一个基类控制器,在基类中封装统一的返回方法,所有控制器继承自该基类。

不推荐,小道方法

public classApiControllerBase : ControllerBase
{
protected IActionResult ApiResponse(T Data,stringmessage ="Success")
{
var apiResponse = new ApiResponse
{
Success =true
Data = data,
Message = message
};

return Ok(apiResponse);
}
}

publicclassApiResponse
{
publicboolSuccess { get; set; }
public T Data { get; set; }
publicstringMessage { get; set; }
}

[ApiController]
[Route("api/[controller]")]
publicclassSampleController : ApiControllerBase
{
[HttpGet]
public IActionResult Get
{
var data = new { Name ="John", Age =30};
return ApiResponse(data);
}
}首先,创建一个自定义的ActionFilter,用于统一返回格式。using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

publicclassApiResponseFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// 可以在请求执行前做一些事情
}

public void OnActionExecuted(ActionExecutedContext context)
{
if (context.Result is ObjectResult objectResult)
{
// 对响应内容进行封装
var response = new ApiResponseobject
{
Success =true
Data = objectResult.Value,
Message ="请求成功"
Code =200
};
objectResult.Value = response;
}
}
}在Startup.cs中注册全局过滤器public void ConfigureServices(IServiceCollection services)
{
// 注册全局 Action Filter
services.AddControllers(options =>
{
options.Filters.Add;
});
}通过上述操作,就可以实现一个简单的全局统一的数据返回格式,所有 API 返回的数据都会被统一封装成ApiResponse

如果你想要在所有请求返回时进行更灵活的处理,可以使用中间件。

创建自定义中间件

using Newtonsoft.json;
using WebApiReseponeDeo;

publicclassApiResponseMiddleware
{
privatereadonly RequestDelegate _next;

public ApiResponseMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task InvokeAsync(HttpContext context)
{
var originalBodyStream = context.Response.Body;

using (var memoryStream = new MemoryStream)
{
context.Response.Body = memoryStream;

await _next(context);

// 在这里获取到原始的响应内容
memoryStream.Seek(0, SeekOrigin.Begin);
var responseBody = new StreamReader(memoryStream).ReadToEnd;

var apiResponse = new ApiResponsestring
{
Success =true
Data = responseBody,
Message ="请求成功"
Code =200
};

// 转换成 JSON 字符串
var jsonResponse = JsonConvert.SerializeObject(apiResponse);

context.Response.Body = originalBodyStream;
await context.Response.WriteAsync(jsonResponse);
}
}
}在Startup.cs文件的方法中,注册这个自定义的中间件:public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 注册自定义中间件
app.UseMiddleware;

app.UseRouting;
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers;
});
}

这会在每个请求的响应之后处理返回的数据,确保它们以统一的格式返回,并且在出现异常时也能返回统一格式的错误信息。

Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。

来源:opendotnet

相关推荐