ZetCode

ASP.NET NoContent

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 NoContent 结果。当请求成功但返回的数据为空时,此响应类型对于 RESTful API 至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。NoContent 结果提供了一种处理空响应的标准方法。

基本定义

ASP.NET 中的 NoContent 结果返回 HTTP 204 No Content 状态码。这表示服务器成功处理了请求,但没有内容可以返回。

此响应通常用于成功的 PUT、POST 或 DELETE 操作,在这些操作中返回数据并非必需。它有助于维护 RESTful API 约定并减少不必要的数据传输。

NoContent 是 ASP.NET 操作结果系统的一部分,该系统提供了各种返回 HTTP 响应的方法。它可以通过 Web API 控制器中的 ControllerBase 类获得。

ASP.NET NoContent 示例

以下示例演示了如何在 Web API 控制器中使用 NoContent。

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

var app = builder.Build();

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

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

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

[ApiController]
[Route("api/[controller]")]
public class TasksController : ControllerBase
{
    private static List<TaskItem> _tasks = new()
    {
        new TaskItem(1, "Complete report", false),
        new TaskItem(2, "Review code", true),
        new TaskItem(3, "Update documentation", false)
    };

    [HttpDelete("{id}")]
    public IActionResult DeleteTask(int id)
    {
        var taskToRemove = _tasks.FirstOrDefault(t => t.Id == id);
        if (taskToRemove == null) return NotFound();
        
        _tasks.Remove(taskToRemove);
        return NoContent();
    }

    [HttpPut("{id}/complete")]
    public IActionResult MarkAsComplete(int id)
    {
        var task = _tasks.FirstOrDefault(t => t.Id == id);
        if (task == null) return NotFound();
        
        task.IsCompleted = true;
        return NoContent();
    }
}

public class TaskItem
{
    public int Id { get; set; }
    public string Title { get; set; }
    public bool IsCompleted { get; set; }

    public TaskItem(int id, string title, bool isCompleted)
    {
        Id = id;
        Title = title;
        IsCompleted = isCompleted;
    }
}

此控制器演示了两个适合使用 NoContent 的场景。第一个方法处理 DELETE 请求,并在成功删除后返回 NoContent。

第二个方法通过 PUT 请求将任务标记为已完成。由于客户端已经拥有任务数据,返回 NoContent 比发送更新后的任务更有效。

这两种方法都遵循 REST 约定,即成功的状态更改操作在不需要返回数据时返回 204 No Content。这减少了网络开销。

该示例展示了如何将 NoContent 用于修改服务器状态但无需返回数据的不同操作。它对于幂等操作特别有用。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 NoContent 结果。此响应类型对于构建高效、符合 REST 的 API 至关重要。

作者

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

列出所有 ASP.NET 教程