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

如何在.NET 6 Minimal API中实现类似ASP.NET Core 5的自定义ActionResult功能

方案确认

你查阅的资料是正确的,.NET 6 Minimal API 中自定义返回结果的标准实现方案就是实现IResult接口,它替代了 MVC 架构中ActionResult的角色,负责自定义 HTTP 响应的生成逻辑。

具体实现代码

和你之前的ErrorResult逻辑对齐的实现如下:

public class ErrorResult : IResult
{
    private readonly IList<Error> _errors;
    // 可根据需求调整默认状态码,示例用400 BadRequest
    private readonly int _statusCode = StatusCodes.Status400BadRequest;

    public ErrorResult(IList<Error> errors, int? statusCode = null)
    {
        _errors = errors;
        if (statusCode.HasValue)
        {
            _statusCode = statusCode.Value;
        }
    }

    // IResult 接口唯一需要实现的方法,入参为当前请求的HttpContext
    public async Task ExecuteAsync(HttpContext httpContext)
    {
        // 这里替换为你原来的自定义响应生成逻辑即可
        httpContext.Response.StatusCode = _statusCode;
        httpContext.Response.ContentType = "application/json; charset=utf-8";
        
        // 示例:序列化错误列表写入响应体,也可以替换为你自己的序列化逻辑
        await httpContext.Response.WriteAsJsonAsync(_errors);
    }
}
使用方法

你可以直接在 Minimal API 的路由处理逻辑中返回该实例,和之前 MVC 控制器中的用法完全一致:

app.MapPost("/validate", (ValidateInput input) =>
{
    var errors = new List<Error>();
    if(string.IsNullOrEmpty(input.Name))
    {
        errors.Add(new Error("名称不能为空"));
    }
    if(errors.Any())
    {
        return new ErrorResult(errors);
    }
    return Results.Ok();
});
可选优化

如果你想和 Minimal API 内置的Results.Ok()、Results.NotFound()等用法保持统一,可以新增静态工具类封装实例创建逻辑:

public static class CustomResults
{
    public static IResult Error(IList<Error> errors, int? statusCode = null)
    {
        return new ErrorResult(errors, statusCode);
    }
}

优化后调用更简洁:

return CustomResults.Error(errors);

内容的提问来源于stack exchange,提问作者Miguel Moura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:15:04