在.NET Core API中实现全局统一的数据返回格式,可以通过自定义中间件或使用ActionFilter来实现。摘要:RESTful API:REST(Representational State Transfer)是一种基于 HTTP 协议的网络应用程序的架构风格。RESTful API 是一种设计风格,用于创建具有统一接口的 Web 服务。通过定义资源(资源的 URL)、
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
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!