ZetCode

ASP.NET NotFound

最后修改于 2025 年 4 月 3 日

在本文中,我们探讨 ASP.NET 8 中的 NotFound 响应。此响应对于构建正确处理缺失资源的 RESTful API 至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。NotFound 响应有助于维护正确的 HTTP 语义。

基本定义

ASP.NET 中的 NotFound 响应会向客户端返回 HTTP 404 状态码。这表示服务器上找不到请求的资源。

在 ASP.NET 控制器中,当请求的实体在数据存储中不存在时,通常从操作方法返回 NotFound。它实现了正确的 REST 资源检索语义。

NotFound 是 ASP.NET 的 ControllerBase 类辅助方法的一部分。这些方法简化了带有适当响应的常见 HTTP 状态码的返回。

ASP.NET NotFound 示例

以下示例演示了一个使用 NotFound 的 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);
    }

    [HttpGet("email/{email}")]
    public IActionResult GetUserByEmail(string email)
    {
        var user = _users.FirstOrDefault(u => 
            u.Email.Equals(email, StringComparison.OrdinalIgnoreCase));
            
        return user == null ? NotFound() : Ok(user);
    }
}

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

此控制器在两个场景中演示了 NotFound 的用法。第一个方法在命中基路由 /api/users 时返回所有用户。

第二个方法使用路由参数 {id} 来获取特定用户。如果用户不存在,它会返回带有自定义消息的 NotFound。

第三个方法显示了按电子邮件搜索时没有消息的 NotFound。条件运算符演示了在简单情况下简洁的 NotFound 用法。

该示例展示了正确的 RESTful 模式,即在请求的资源不存在时返回 NotFound。这有助于客户端区分成功的空响应和实际缺失的资源。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 NotFound 响应。此重要功能有助于构建遵循 HTTP 语义的正确 RESTful API。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 ASP.NET 教程