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 为不同的数据格式创建专用端点。这在使用支持多种客户端类型时非常有用。
来源
在本文中,我们探讨了 ASP.NET 8 中的 Consumes 属性。此强大功能可对请求内容类型的处理进行精确控制。