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 @   yinghualeihenmei  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示