ASP.NET Produces
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 Produces 属性。此属性对于控制 Web API 控制器中的响应内容类型至关重要。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Produces 属性有助于定义操作可以返回的 MIME 类型。
基本定义
ASP.NET 中的 Produces 属性指定特定操作可以产生的响应内容类型。它有助于 Web API 中的内容协商。
当应用于操作或控制器时,Produces 将响应格式限制为指定的媒体类型。这确保客户端以预期的格式接收数据。
Produces 是 ASP.NET 内容协商系统的一部分。它与 HTTP 请求中的 Accept 标头一起工作,以确定最佳响应格式。
ASP.NET Produces 示例
以下示例演示了一个使用 Produces 属性来控制响应格式的 Web API 控制器。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
public class WeatherController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild",
"Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
});
}
[HttpGet("{id}")]
[Produces("application/json", "application/xml")]
public ActionResult<WeatherForecast> GetById(int id)
{
if (id < 1 || id > 5) return NotFound();
return new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(id)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
};
}
[HttpGet("text")]
[Produces("text/plain")]
public IActionResult GetTextForecast()
{
var forecast = new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
};
return Content($"{forecast.Date}: {forecast.Summary}, {forecast.TemperatureC}°C");
}
}
public record WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
此控制器演示了 Produces 属性的三种不同用法。控制器级别的属性将 JSON 指定为默认响应格式。
第一个操作继承了控制器级别的 Produces 属性。第二个操作覆盖了它,以支持 JSON 和 XML 响应。第三个操作专门生成纯文本。
ApiController 属性为主模型启用自动 HTTP 400 响应。Route 为此控制器中的所有操作设置了基本路径。
该示例演示了如何在不同级别使用 Produces 来控制响应格式。它与 ASP.NET 的内容协商一起工作,以根据客户端偏好返回适当的格式。
来源
Microsoft ASP.NET Web API 格式文档
在本文中,我们探讨了 ASP.NET 8 中的 Produces 属性。此强大功能有助于确保您的 API 以预期的格式返回数据。