ZetCode

ASP.NET IActionResult

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 IActionResult 接口。该接口对于构建返回各种 HTTP 响应的灵活 Web API 至关重要。

ASP.NET 是一个跨平台框架,用于构建现代 Web 应用程序。IActionResult 提供了一种从控制器操作返回不同类型 HTTP 响应的方法。

基本定义

IActionResult 是 ASP.NET Core 中的一个接口,代表操作方法的返回结果。它允许使用状态码返回不同的 HTTP 响应。

控制器操作方法可以返回 IActionResult,从而在响应类型上提供灵活性。这包括 JSON、视图、文件、重定向和状态码。

该接口定义了一个名为 ExecuteResultAsync 的方法,该方法负责将响应写入 HTTP 上下文。ControllerBase 中的各种帮助方法会返回 IActionResult 的实现。

常见的实现包括 OkResult、NotFoundResult、BadRequestResult 和 ViewResult。这些提供了返回 HTTP 响应的标准方法。

ASP.NET IActionResult 示例

以下示例演示了一个使用 IActionResult 的 Web API 控制器。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。

Controllers/UsersController.cs
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    private static List<User> _users = new()
    {
        new User(1, "John", "john@example.com"),
        new User(2, "Sarah", "sarah@example.com"),
        new User(3, "Mike", "mike@example.com")
    };

    [HttpGet]
    public IActionResult GetAllUsers()
    {
        return Ok(_users);
    }

    [HttpGet("{id}")]
    public IActionResult GetUserById(int id)
    {
        var user = _users.FirstOrDefault(u => u.Id == id);
        if (user == null) return NotFound($"User with id {id} not found");
        return Ok(user);
    }

    [HttpPost]
    public IActionResult CreateUser([FromBody] User newUser)
    {
        if (newUser == null) return BadRequest("User data is required");
        
        newUser.Id = _users.Max(u => u.Id) + 1;
        _users.Add(newUser);
        
        return CreatedAtAction(nameof(GetUserById), 
            new { id = newUser.Id }, newUser);
    }

    [HttpPut("{id}")]
    public IActionResult UpdateUser(int id, [FromBody] User updatedUser)
    {
        var existingUser = _users.FirstOrDefault(u => u.Id == id);
        if (existingUser == null) return NotFound();
        
        existingUser.Name = updatedUser.Name;
        existingUser.Email = updatedUser.Email;
        
        return NoContent();
    }

    [HttpDelete("{id}")]
    public IActionResult DeleteUser(int id)
    {
        var user = _users.FirstOrDefault(u => u.Id == id);
        if (user == null) return NotFound();
        
        _users.Remove(user);
        return Ok(user);
    }
}

public record User(int Id, string Name, string Email);

此控制器演示了各种 IActionResult 的返回类型。Ok 方法返回 200 OK 以及指定的数据。NotFound 返回 404。

CreatedAtAction 方法返回 201 Created 并带有一个 Location 标头。BadRequest 返回 400 表示无效请求。NoContent 返回 204 表示成功更新。

每个操作方法都返回适当的 HTTP 状态码和响应格式。这遵循 REST 约定,并为 API 消费者提供清晰的反馈。

该示例展示了 IActionResult 如何支持从同一个控制器返回不同的响应类型。这种灵活性对于构建健壮的 API 至关重要。

来源

Microsoft ASP.NET 操作返回类型文档

在本文中,我们探讨了 ASP.NET 8 中的 IActionResult 接口。这一强大功能提供了从控制器操作返回不同 HTTP 响应的灵活性。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程