ASP.NET 6 Minimal API如何实现通用响应结果扩展方法?
在ASP.NET 6 Minimal API中实现自定义统一响应方法
要实现你需要的CreateResponse统一响应方法,利用Results静态类的Extensions属性扩展即可,步骤如下:
1. 编写IResultExtensions扩展方法
创建静态类,扩展IResultExtensions接口,添加自定义的CreateResponse方法,该方法接收状态码和响应内容,返回标准的IResult:
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.HttpResults; public static class CustomResultExtensions { public static IResult CreateResponse(this IResultExtensions extensions, int statusCode, object? responseBody) { // 利用内置的StatusCodeHttpResult实现状态码和响应体的绑定 return new StatusCodeHttpResult(statusCode) { Value = responseBody }; } }
这个方法会自动使用项目配置的序列化方式(默认是JSON)将responseBody序列化为响应内容,无需手动处理序列化逻辑。
2. 在Minimal API中使用扩展方法
只要确保扩展类的命名空间被引用,就可以通过Results.Extensions调用自定义方法:
app.MapGet("/", () => { try { return Results.Extensions.CreateResponse(200, new { id = 1 }); } catch(Exception _) { return Results.Extensions.CreateResponse(500, new { error = "my error"}); } }).WithName("GetRoot");
3. (可选)简化调用写法
如果想要更贴近你示例中的Results.CreateResponse写法,可以再封装一层静态类,避免每次都写.Extensions:
public static class CustomResults { public static IResult CreateResponse(int statusCode, object? responseBody) { return Results.Extensions.CreateResponse(statusCode, responseBody); } }
调用时直接使用:
app.MapGet("/", () => { try { return CustomResults.CreateResponse(200, new { id = 1 }); } catch(Exception _) { return CustomResults.CreateResponse(500, new { error = "my error"}); } }).WithName("GetRoot");
补充说明
- 若需要自定义响应的
Content-Type或序列化规则,可以手动构建响应,比如:public static IResult CreateResponse(this IResultExtensions extensions, int statusCode, object? responseBody) { var json = System.Text.Json.JsonSerializer.Serialize(responseBody); return Results.Text(json, "application/json", statusCode: statusCode); } - 针对异常场景,还可以扩展重载方法,直接传入
Exception对象自动包装错误信息,进一步简化代码。
内容的提问来源于stack exchange,提问作者riki
相关产品推荐
相关产品推荐

