基于IActionResult 有很多子类,ControllerBase 又实现了很多快捷方法。

117 阅读2分钟

下面给出 ASP-NET Core 中最常用、也是最推荐使用的 ControllerBase 快捷方法 的完整清单(全部返回 IActionResult 或其泛型 ActionResult)。
每个方法都对应一种 HTTP 状态码,背后都有对应的 Result 类(如 OkObjectResult、BadRequestObjectResult 等)。
为方便记忆,按状态码分组列出,并给出调用示例与对应的底层 Result 类型。


✅ 2xx 成功

快捷方法HTTP 状态码典型场景对应 Result 类
Ok() / Ok(value)200成功并返回(可选)数据OkResult / OkObjectResult
CreatedAtAction201创建资源成功,并在响应头给出 LocationCreatedAtActionResult
CreatedAtRoute201同上,但以路由名定位CreatedAtRouteResult
Accepted() / Accepted(value)202请求已被接受但尚未处理完成AcceptedResult / AcceptedAtActionResult
NoContent()204成功但无返回体NoContentResult

示例

[HttpPost]
public IActionResult Create(UserDto dto)
{
    var id = _service.Add(dto);
    return CreatedAtAction(nameof(GetById), new { id }, null); // 201
}

❌ 4xx 客户端错误

快捷方法HTTP 状态码典型场景对应 Result 类
BadRequest() / BadRequest(error)400参数校验失败BadRequestResult / BadRequestObjectResult
Unauthorized()401未提供或令牌无效UnauthorizedResult
Forbid()403已登录但无权限ForbidResult
NotFound() / NotFound(error)404资源不存在NotFoundResult / NotFoundObjectResult
Conflict() / Conflict(error)409资源状态冲突ConflictResult / ConflictObjectResult
UnprocessableEntity()422语义正确但无法处理UnprocessableEntityObjectResult
ValidationProblem()400专门用于模型验证错误ValidationProblemDetails
Problem()任意 4xx/5xx返回标准 ProblemDetailsObjectResult

示例

if (!ModelState.IsValid)
    return ValidationProblem(ModelState);   // 400 + ProblemDetails

var entity = _repo.Find(id);
return entity is null ? NotFound() : Ok(entity);   // 404 / 200

⚠️ 5xx 服务器错误

快捷方法HTTP 状态码典型场景对应 Result 类
StatusCode(500)500通用服务器内部错误StatusCodeResult
Problem(statusCode:500)500使用 ProblemDetails 格式ObjectResult

示例

try
{
    _service.DoRiskJob();
    return Ok();
}
catch (Exception ex)
{
    return Problem(title: "服务器异常", detail: ex.Message, statusCode: 500);
}

📌 其他常用辅助方法

方法作用
File()返回文件内容(FileContentResult / FileStreamResult / VirtualFileResult)
PhysicalFile()直接返回磁盘文件
Redirect() / RedirectPermanent()302/301 重定向
RedirectToAction() / RedirectToRoute()重定向到同一站点内 Action 或路由
LocalRedirect()仅允许站内相对路径
Content()直接返回字符串或任意文本

✅ 使用建议

  1. 优先使用 ControllerBase 的快捷方法(Ok、BadRequest、NotFound 等)——代码更短、语义更明确。
  2. 需要统一错误格式时,用 Problem()ValidationProblem(),它们会自动生成符合 RFC 7807 的 ProblemDetails
  3. Swagger/OpenAPI 友好:在 Action 上标记 [ProducesResponseType(typeof(Product), StatusCodes.Status200OK)],生成更精确的文档。

掌握以上方法,即可覆盖日常 Web API 开发中 99% 的返回场景。