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 控制器。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。
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。这有助于客户端区分成功的空响应和实际缺失的资源。
来源
在本文中,我们探讨了 ASP.NET 8 中的 NotFound 响应。此重要功能有助于构建遵循 HTTP 语义的正确 RESTful API。