ZetCode

ASP.NET 状态码

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 StatusCode 功能。状态码对于构建能够与客户端正常通信的 RESTful API 和 Web 服务至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。正确使用状态码有助于创建健壮且可预测的 API。

基本定义

HTTP 状态码是服务器返回的三位数数字,用于指示客户端请求的结果。它们根据第一个数字分为五类。

在 ASP.NET 中,可以使用 StatusCode 方法或 Ok、NotFound 和 BadRequest 等各种辅助方法返回状态码。这些方法会创建正确的 HTTP 响应。

状态码提供了有关请求结果的重要信息。它们帮助客户端了解请求是成功、失败还是需要进一步的操作。

ASP.NET 状态码示例

以下示例演示了在 ASP.NET Web API 控制器中返回状态码的各种方法。

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

var app = builder.Build();

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

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

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

[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
    private static List<Order> _orders = new()
    {
        new Order(1, "Pending", 150.00m),
        new Order(2, "Completed", 299.99m),
        new Order(3, "Cancelled", 75.50m)
    };

    [HttpGet("{id}")]
    public IActionResult GetOrder(int id)
    {
        var order = _orders.FirstOrDefault(o => o.Id == id);
        if (order == null)
        {
            return NotFound(); // Returns 404 status code
        }
        return Ok(order); // Returns 200 status code with data
    }

    [HttpPost]
    public IActionResult CreateOrder([FromBody] Order order)
    {
        if (order == null || string.IsNullOrEmpty(order.Status))
        {
            return BadRequest(); // Returns 400 status code
        }

        order.Id = _orders.Max(o => o.Id) + 1;
        _orders.Add(order);

        return CreatedAtAction(
            nameof(GetOrder), 
            new { id = order.Id }, 
            order); // Returns 201 status code
    }

    [HttpPut("{id}")]
    public IActionResult UpdateOrder(int id, [FromBody] Order order)
    {
        var existingOrder = _orders.FirstOrDefault(o => o.Id == id);
        if (existingOrder == null)
        {
            return NotFound(); // Returns 404 status code
        }

        existingOrder.Status = order.Status;
        existingOrder.Amount = order.Amount;

        return NoContent(); // Returns 204 status code
    }

    [HttpDelete("{id}")]
    public IActionResult DeleteOrder(int id)
    {
        var order = _orders.FirstOrDefault(o => o.Id == id);
        if (order == null)
        {
            return NotFound(); // Returns 404 status code
        }

        _orders.Remove(order);
        return StatusCode(StatusCodes.Status200OK, 
            new { Message = "Order deleted successfully" });
    }
}

public record Order(int Id, string Status, decimal Amount);

此控制器演示了 RESTful API 中的各种状态码场景。GetOrder 方法返回 200 (OK) 或 404 (Not Found)。

CreateOrder 方法对于无效输入返回 400 (Bad Request),对于成功创建返回 201 (Created)。它包含新资源的链接。

UpdateOrder 方法对于成功更新返回 204 (No Content),对于不存在的订单返回 404。DeleteOrder 方法显示了 `StatusCode` 与自定义消息的显式使用。

此示例涵盖了 REST API 中常用的 HTTP 状态码:200、201、204、400 和 404。每个状态码都能正确传达操作的结果。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 StatusCode 功能。正确使用状态码对于构建专业、符合标准的 Web API 至关重要。

作者

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

列出所有 ASP.NET 教程