虽然正确答案已经提交,但我愿意提供一个例子。假设您已经将 Swashbuckle.AspNetCore 包添加到了您的项目中,并在 Startup.Configure(...) 中像这样使用了它:
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "My Web Service API V1");
options.RoutePrefix = "api/docs";
});
如果有这样一个测试控制器操作端点:
[HttpGet]
public ActionResult GetAllItems()
{
if ((new Random()).Next() % 2 == 0)
{
return Ok(new string[] { "value1", "value2" });
}
else
{
return Problem(detail: "No Items Found, Don't Try Again!");
}
}
将会得到一个 Swagger UI 的卡片/部分,类似这样(运行项目并导航至/api/docs/index.html):

正如你所看到的,对于该端点没有提供“元数据”。
现在,将端点更新为以下内容:
[HttpGet]
[ProducesResponseType(typeof(IEnumerable<string>), 200)]
[ProducesResponseType(404)]
public ActionResult GetAllItems()
{
if ((new Random()).Next() % 2 == 0)
{
return Ok(new string[] { "value1", "value2" });
}
else
{
return Problem(detail: "No Items Found, Don't Try Again!");
}
}
这不会改变您的端点行为,但现在 Swagger 页面看起来像这样:

这样更好,因为现在客户端可以看到可能的响应状态码,以及每个响应状态下返回数据的类型/结构。
请注意,虽然我没有为 404 定义返回类型,但 ASP.NET Core(我使用的是 .NET 5)足够聪明,可以将返回类型设置为 ProblemDetails。
如果这是您想要采取的路径,建议将 Web API 分析器 添加到项目中,以接收一些有用的警告。
p.s. 我还想在 app.UseSwaggerUI(...) 配置中使用 options.DisplayOperationId();。这样做后,Swagger UI 将显示映射到每个端点的实际 .NET 方法的名称。例如,上面的端点是针对 /api/sample 的 GET 请求,但实际的 .NET 方法被称为 GetAllItems()