ActionResult

117 阅读2分钟

在 ASP.NET Core 中,IActionResult 是一个接口,它定义了生成 HTTP 响应的方法。ActionResult 类(注意这里是类,不是接口)及其派生类实现了这个接口。因此,当我们谈论 IActionResult 的“派生图”时,我们实际上是在谈论实现了 IActionResult 接口的类及其子类。

以下是一个简化的 IActionResult 实现类及其派生类的关系图:

IActionResult (接口)
    ├── ActionResult (抽象类,实现了 IActionResult 接口)
    │   ├── ObjectResult (返回对象内容,如 JSON)
    │   │   └── JsonResult (特定于 JSON 的 ObjectResult)
    │   ├── ContentResult (返回纯文本内容)
    │   ├── FileResult (返回文件内容)
    │   │   ├── FileContentResult (返回内存中的文件内容)
    │   │   ├── FilePathResult (返回文件系统中的文件路径)
    │   │   ├── FileStreamResult (返回文件流)
    │   │   ├── VirtualFileResult (返回虚拟文件系统中的文件)
    │   │   └── PhysicalFileResult (返回物理文件系统中的文件,继承自 FileStreamResult)
    │   ├── BadRequestResult (返回 400 Bad Request 状态码)
    │   │   └── BadRequestObjectResult (返回 400 状态码及对象数据)
    │   ├── ChallengeResult (用于身份验证挑战)
    │   ├── ConflictResult (返回 409 Conflict 状态码)
    │   ├── ForbidResult (禁止访问,返回 403 Forbidden 状态码)
    │   ├── NotFoundResult (返回 404 Not Found 状态码)
    │   │   └── NotFoundObjectResult (返回 404 状态码及对象数据)
    │   ├── OkResult (返回 200 OK 状态码)
    │   │   └── OkObjectResult (返回 200 状态码及对象数据)
    │   ├── PartialViewResult (返回部分视图)
    │   ├── ProblemDetailsResult (返回 Problem Details 响应,用于错误处理)
    │   ├── RedirectResult (重定向到另一个 URL)
    │   ├── RedirectToActionResult (重定向到另一个动作方法)
    │   │   ├── RedirectToActionPermanentResult (永久重定向到另一个动作方法)
    │   │   └── RedirectToPageResult (重定向到 Razor Page,但它是 RedirectToActionResult 的子类,用于特定场景)
    │   │       └── RedirectToPagePermanentResult (永久重定向到 Razor Page)
    │   ├── SignInResult (用于用户登录)
    │   ├── SignOutResult (用于用户注销)
    │   ├── StatusCodeResult (返回自定义状态码)
    │   ├── ViewComponentResult (返回视图组件)
    │   └── ViewResult (返回完整视图)
    │       └── RazorPageResult (内部使用,不直接暴露给开发者,用于 Razor Pages)
    └── 其他自定义 IActionResult 实现(开发者可以创建自己的实现)

请注意,ActionResult 类本身是一个抽象类,它实现了 IActionResult 接口,并且提供了许多具体的实现类。在上面的图中,ActionResult 被标记为抽象类,并且它的子类(如 ObjectResultContentResult 等)都实现了 IActionResult 接口的功能。

此外,开发者还可以创建自己的 IActionResult 实现类,以满足特定的需求。这些自定义实现类将不会出现在上面的图中,因为它们是由开发者根据具体需求创建的。

希望这个关系图能帮助你更好地理解 IActionResult 接口及其实现类在 ASP.NET Core 中的层次结构。