ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)
时间: 2024-03-20 21:44:21 浏览: 109
可以通过自定义一个中间件来实现 ASP.NET Core WebApi 返回统一格式参数的需求,下面是一个简单的实现方式:
1. 首先创建一个类来表示统一的返回格式,如下所示:
```
public class ApiResponse<T>
{
public int Code { get; set; }
public string Message { get; set; }
public T Data { get; set; }
}
```
其中,Code 表示返回码,Message 表示返回信息,Data 表示返回数据。
2. 创建一个中间件来处理返回结果,如下所示:
```
public class ApiResponseMiddleware
{
private readonly RequestDelegate _next;
public ApiResponseMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
// 执行后续中间件
await _next(context);
// 如果返回的是 JsonResult 类型,则对返回结果进行处理
if (context.Response.ContentType == "application/json")
{
var originalBodyStream = context.Response.Body;
using (var responseBody = new MemoryStream())
{
context.Response.Body = responseBody;
var jsonSerializerSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
// 读取原始返回结果
var streamReader = new StreamReader(context.Response.Body);
var responseBodyText = await streamReader.ReadToEndAsync();
context.Response.Body.Seek(0, SeekOrigin.Begin);
// 将原始返回结果反序列化为 ApiResponse 类型
var result = JsonConvert.DeserializeObject<ApiResponse<object>>(responseBodyText, jsonSerializerSettings);
// 将 Null 替换为空字符串
result.Data = result.Data ?? string.Empty;
// 将 ApiResponse 类型序列化为 Json 字符串
var newResponseBody = JsonConvert.SerializeObject(result);
// 将处理后的结果写入 Response 中
using (var sw = new StreamWriter(context.Response.Body))
{
sw.Write(newResponseBody);
}
}
}
}
}
```
3. 在 Startup.cs 文件的 Configure 方法中添加中间件,如下所示:
```
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 省略其他代码...
app.UseMiddleware<ApiResponseMiddleware>();
// 省略其他代码...
}
```
这样就可以实现 ASP.NET Core WebApi 返回统一格式参数的需求,并且将返回结果中的 Null 替换为空字符串。
阅读全文