1. 最小 Web API 返回 JSON 与状态码
最小 API 的两个端点:对象 JSON 与指定状态码
本例用 WebApplication.CreateBuilder 建立最小宿主,注册两个端点:GET /api/weather 返回一个匿名对象,由框架自动序列化为 JSON;GET /api/status/{code} 读取路由参数并返回指定 HTTP 状态码。运行后分别用浏览器或 curl 访问,观察响应头中的 Content-Type 与状态行。
完整可运行代码
新建一个 ASP.NET Core 空项目,将 Program.cs 替换为以下内容。代码不依赖任何额外 NuGet 包,直接使用最小 API 的 MapGet 与 Results 辅助方法。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// 端点 A:返回对象 JSON
app.MapGet("/api/weather", () =>
{
var forecast = new
{
City = "Beijing",
TemperatureC = 26,
Summary = "Sunny",
Date = new DateTime(2025, 6, 1)
};
return Results.Ok(forecast);
});
// 端点 B:返回指定 HTTP 状态码
app.MapGet("/api/status/{code:int}", (int code) =>
{
return Results.StatusCode(code);
});
app.Run();
运行与验证
在项目目录执行 dotnet run,控制台会输出监听地址(例如 http://localhost:5000)。打开另一个终端,用以下命令验证两个端点的行为。
# 端点 A:查看 JSON 响应与 Content-Type
curl -i http://localhost:5000/api/weather
# 端点 B:返回 404
curl -i http://localhost:5000/api/status/404
# 端点 B:返回 201
curl -i http://localhost:5000/api/status/201
验证要点:端点 A 的响应头应包含
Content-Type: application/json; charset=utf-8,响应体为 JSON 对象;端点 B 的响应状态行分别为 HTTP/1.1 404 Not Found 和 HTTP/1.1 201 Created,且响应体为空。若访问 /api/status/abc,由于路由约束 {code:int} 不匹配,框架会返回 404,这属于路由匹配失败而非端点内部逻辑。
常见问题:若
dotnet run 后端口不是 5000,请以控制台实际输出为准;若使用 HTTPS 重定向,curl 可能收到 307,可加 -L 跟随或直接访问 HTTP 地址。端点 B 的 Results.StatusCode 不会写入响应体,因此 Content-Length 为 0,这与返回空字符串的 200 响应不同。