You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:52:57