ZetCode

ASP.NET Consumes

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 Consumes 属性。此属性对于指定操作方法可以接受的内容类型至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Consumes 属性有助于定义请求内容类型的处理。

基本定义

ASP.NET 中的 Consumes 属性限制了操作方法将接受的内容类型。它指定了操作可以处理的媒体类型。

当应用于控制器或操作方法时,Consumes 会根据传入请求的 Content-Type 标头进行筛选。只有匹配的请求才会被处理。

Consumes 在 Web API 中特别有用,因为不同的端点可能接受不同的数据格式。它同时适用于 JSON、XML 和自定义格式。

ASP.NET Consumes 示例

以下示例演示了一个使用 Consumes 属性处理不同内容类型的 Web API 控制器。

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

var app = builder.Build();

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

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

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

[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
    private static List<Order> _orders = new();

    // Accepts JSON requests
    [HttpPost]
    [Consumes("application/json")]
    public IActionResult CreateOrderFromJson([FromBody] Order order)
    {
        _orders.Add(order);
        return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, order);
    }

    // Accepts XML requests
    [HttpPost("xml")]
    [Consumes("application/xml")]
    public IActionResult CreateOrderFromXml([FromBody] Order order)
    {
        _orders.Add(order);
        return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, order);
    }

    // Accepts form data
    [HttpPost("form")]
    [Consumes("multipart/form-data")]
    public IActionResult CreateOrderFromForm([FromForm] OrderForm form)
    {
        var order = new Order(form.Id, form.ProductName, form.Quantity);
        _orders.Add(order);
        return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, order);
    }

    [HttpGet("{id}")]
    public IActionResult GetOrder(int id)
    {
        var order = _orders.FirstOrDefault(o => o.Id == id);
        if (order == null) return NotFound();
        return Ok(order);
    }
}

public record Order(int Id, string ProductName, int Quantity);
public record OrderForm(int Id, string ProductName, int Quantity);

此控制器演示了三种不同的 Consumes 场景。第一个方法仅接受请求正文中的 JSON 内容(application/json)。

第二个方法专门处理 XML 内容(application/xml)。第三个方法处理表单数据(multipart/form-data)。

ApiController 属性启用了自动模型验证和其他 Web API 约定。每个操作方法处理不同的内容类型。

该示例展示了如何使用 Consumes 为不同的数据格式创建专用端点。这在使用支持多种客户端类型时非常有用。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 Consumes 属性。此强大功能可对请求内容类型的处理进行精确控制。

作者

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

列出所有 ASP.NET 教程