You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Web API:为返回CreatedAtRouteResult的方法添加Swagger属性

如何为返回CreatedAtRouteResult的ASP.NET Core Web API方法添加正确的Swagger属性

你的代码里存在两个关键问题需要修正,才能让Swagger生成准确的API文档:


1. 修正SwaggerResponse的类型参数

CreatedAtRouteResult是ASP.NET Core的一个包装类,它的作用是返回201状态码、资源路由URL和实际的资源数据。Swagger需要知道的是它包装的实际数据类型(也就是你的Subscription实体),而不是CreatedAtRouteResult本身。

另外你原来的代码里,400状态码对应NotFoundResult是错误的——400代表BadRequest,而NotFound对应的是404状态码,这个错误会导致Swagger文档的状态码对应关系混乱,必须修正。

2. 可选但推荐:配合ProducesResponseType属性

ASP.NET Core的[ProducesResponseType]属性会被ApiExplorer识别,Swashbuckle(Swagger的.NET实现)会基于它生成更准确的响应元数据,和[SwaggerResponse]配合使用效果更好。

3. 确保路由名称存在

你在CreatedAtRoute中使用的"GetSubscription"路由名称,必须在你的控制器中存在对应的Get方法路由,比如:

[HttpGet("{id}", Name = "GetSubscription")]
public async Task<IActionResult> GetSubscription(int id)
{
    // 实现逻辑
}

这样Swagger才能正确生成指向该资源的链接。


修改后的完整代码示例

using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;

[HttpPost]
[SwaggerOperation(Summary = "创建新订阅", Description = "根据传入的订阅DTO创建订阅,成功后返回订阅详情及资源访问URL")]
[SwaggerResponse(400, Description = "请求数据无效,比如DTO验证失败")]
[SwaggerResponse(404, Description = "关联的发行方不存在")]
[SwaggerResponse(201, typeof(Subscription), Description = "订阅创建成功,返回创建的订阅实体")]
[ProducesResponseType(typeof(Subscription), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> Create([FromBody] SubscriptionDTO dto)
{
    var issuedTo = (await _tokenService.Get()).IssuedTo;
    Subscription result = await _subscriptionService.CreateAsync(dto, issuedTo.Id);
    
    return result == null ? NotFound() : CreatedAtRoute("GetSubscription", new { id = result.Id }, result);
}

额外说明

如果你的Swashbuckle版本是5.x及以上,还可以通过配置让Swagger自动识别ActionResult的泛型类型,但显式添加SwaggerResponse和ProducesResponseType能让文档更清晰,也避免自动识别可能出现的问题。

内容的提问来源于stack exchange,提问作者Sammani Palansuriya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:05:08