Asp.net core ActionResult继承类
在 ASP.NET Core 中ActionResult是一个抽象基类框架提供了大量继承自它的具体返回类型。为了方便记忆和查阅以下按功能维度对所有常见的ActionResult派生类进行归纳总结1. 数据与内容响应类用于向客户端返回具体的数据载荷或原始文本。返回类型便捷方法核心作用典型场景OkObjectResultOk(obj)返回 200 OK JSON 序列化对象查询成功、列表获取OkResultOk()仅返回 200 OK无响应体操作成功但无需返回数据JsonResultJson(obj)强制 JSON 序列化忽略内容协商需要绕过 Accept 头强制返回 JSONContentResultContent(str, type)原样输出字符串指定 ContentType返回 XML、HTML、纯文本、CSVObjectResultStatusCode(code, obj)自定义状态码 对象序列化非标准状态码如 418、429带响应体2. 资源创建与异步任务类遵循 RESTful 规范用于 POST 创建资源和异步处理反馈。返回类型便捷方法HTTP 状态码核心作用CreatedResultCreated(uri, obj)201手动指定新资源的 Location URLCreatedAtActionResultCreatedAtAction(action, route, obj)201根据 Action 名自动生成 Location最常用CreatedAtRouteResultCreatedAtRoute(routeName, route, obj)201根据路由名称生成 LocationAcceptedResultAccepted(obj)202请求已接收异步处理中AcceptedAtActionResultAcceptedAtAction(action, route, obj)202异步处理中附带状态查询地址3. 客户端错误类用于精确表达不同类型的客户端请求问题。返回类型便捷方法HTTP 状态码语义区分BadRequestObjectResultBadRequest(obj)400请求语法/参数格式错误UnauthorizedResultUnauthorized()401未提供认证信息或凭据无效ForbidResultForbid()403已认证但权限不足NotFoundObjectResultNotFound(obj)404请求的资源不存在ConflictObjectResultConflict(obj)409资源状态冲突如重复提交、并发修改UnprocessableEntityObjectResultUnprocessableEntity(obj)422语法正确但业务语义校验失败模型验证⚠️关键区分400 是你说错了格式问题422 是你说的对但办不到业务规则问题。4. 无内容响应类返回类型便捷方法HTTP 状态码典型场景NoContentResultNoContent()204PUT 更新成功、DELETE 删除成功5. 文件下载类FileResult 子类返回类型便捷方法数据来源适用场景FileContentResultFile(byte[], type, name)内存字节数组动态生成的小文件验证码图片、导出 ExcelFileStreamResultFile(stream, type, name)Stream 流大文件下载、OSS/云存储代理转发PhysicalFileResultPhysicalFile(path, type, name)服务器物理路径静态文件直接返回需做路径安全校验VirtualFileResultFile(virtualPath, type)wwwroot 虚拟路径应用内静态资源返回6. 重定向类返回类型便捷方法HTTP 状态码安全特性RedirectResultRedirect(url)/RedirectPermanent(url)302 / 301支持外部 URL需注意开放重定向风险RedirectToActionResultRedirectToAction(action, controller)302基于 Action 名称编译时安全RedirectToRouteResultRedirectToRoute(routeName, values)302基于路由模板解耦控制器依赖LocalRedirectResultLocalRedirect(url)302✅仅允许本地 URL自动防御开放重定向攻击7. 视图渲染类传统 MVC返回类型便捷方法用途ViewResultView(name, model)渲染完整 Razor 页面PartialViewResultPartialView(name, model)渲染局部视图片段HTMX/AJAX 局部刷新 选型速查决策需要返回什么 │ ├─ JSON 数据 ──────────► OkObjectResult / ActionResultT ├─ 原始文本/XML/HTML ──► ContentResult ├─ 创建资源成功 ───────► CreatedAtActionResult (201) ├─ 异步任务受理 ───────► AcceptedAtActionResult (202) ├─ 更新/删除成功 ──────► NoContentResult (204) ├─ 参数格式错误 ───────► BadRequestObjectResult (400) ├─ 业务校验失败 ───────► UnprocessableEntityObjectResult (422) ├─ 文件下载 ───────────► FileStreamResult (大文件) / FileContentResult (小文件) ├─ 页面跳转 ───────────► LocalRedirectResult (安全) / RedirectToActionResult └─ 自定义状态码 ───────► ObjectResult StatusCode()以上涵盖了 ASP.NET Core 中所有继承自ActionResult的常见返回类型。实际开发中建议优先使用ActionResultT作为方法签名内部根据业务分支返回上述具体类型兼顾类型安全与灵活性。