NotFound()

在 ASP.NET Core 中,NotFound() 是一个辅助方法,用于在控制器中返回一个 HTTP 404 状态码的响应。当资源未找到或请求的资源不存在时,通常会使用这个方法。

作用

NotFound() 方法用于指示请求的资源未找到,返回的 HTTP 响应状态码为 404 Not Found。这在处理 RESTful API 或 MVC 应用时非常有用,尤其是在资源检索失败时。

使用场景

以下是一些常见的使用场景:
  1. 资源不存在:当请求的资源(如数据库中的记录)不存在时,返回 NotFound()
  2. 无效的请求参数:当请求参数无效或无法找到对应的资源时,返回 NotFound()
  3. API 设计:在 RESTful API 中,当请求的资源不存在时,返回 404 状态码是一种标准做法。

示例代码

以下是一个使用 NotFound() 的示例:

控制器代码

csharp复制
public class ProductsController : Controller
{
    private readonly MyDbContext _context;

    public ProductsController(MyDbContext context)
    {
        _context = context;
    }

    // GET: Products/Details/5
    public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound(); // 返回 404,因为没有提供有效的 ID
        }

        var product = await _context.Products.FindAsync(id);
        if (product == null)
        {
            return NotFound(); // 返回 404,因为没有找到对应的资源
        }

        return View(product); // 返回视图并传递产品数据
    }
}

API 控制器代码

csharp复制
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly MyDbContext _context;

    public ProductsController(MyDbContext context)
    {
        _context = context;
    }

    // GET: api/Products/5
    [HttpGet("{id}")]
    public async Task<IActionResult> GetProduct(int id)
    {
        var product = await _context.Products.FindAsync(id);
        if (product == null)
        {
            return NotFound(); // 返回 404,因为没有找到对应的资源
        }

        return Ok(product); // 返回 200 OK 和产品数据
    }
}

返回的内容

  • 对于 MVC 视图:NotFound() 返回一个 404 状态码的 HTTP 响应,通常会显示一个错误页面。
  • 对于 API:NotFound() 返回一个 404 状态码的 HTTP 响应,响应体通常是空的,或者可以自定义返回一些错误信息。

自定义错误信息

如果需要返回自定义的错误信息,可以使用 NotFound(object value) 方法。例如:
csharp复制
return NotFound(new { message = "Product not found" });
这将返回一个 404 状态码,并在响应体中包含自定义的 JSON 数据:
JSON复制
{
    "message": "Product not found"
}

总结

NotFound() 是一个非常有用的工具,用于处理资源未找到的情况。它可以帮助开发者遵循 HTTP 状态码的标准,提供清晰的错误响应,从而提升用户体验和 API 的可维护性。
posted @ 2025-02-08 16:57  yinghualeihenmei  阅读(57)  评论(0)    收藏  举报