我有 Swashbuckle 带注释的代码,如下所示:
[Route("api/Subscribers/{id}/[controller]")]
[Route("api/Organizations/{id}/[controller]")]
public class AddressesController : Controller
{
[HttpGet("{aid}")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(PostalRecord))]
public async Task<IActionResult> GetAddress(Guid id, Guid aid)
{
//do something
}
我想使用GroupActionsBy自定义,如本例所示 https://stackoverflow.com/questions/34175018/grouping-of-api-methods-in-documentation-is-there-some-custom-attribute,但我想要上面的GetAddress
方法同时包含到与所示的两个路由前缀相对应的两个单独的组中:
[Route("api/Subscribers/{id}/[controller]")]
[Route("api/Organizations/{id}/[controller]")]
换句话说,我希望在两者下列出相同的方法:
如何才能做到这一点?
顺便说一句,我正在使用 ASP.NET Core (dnx46
)。如果还无法使用 Swashbucklee 的 ASP.NET Core 版本来执行此操作,那么仍然可以使用完整的 CLR(Web API 2.2?)示例。
另外,为了更完整地说明我正在尝试做的事情 - 我有一个单独的SO帖子 https://stackoverflow.com/questions/36522617/route-disambiguation-in-asp-net-core-mvc-6.
Update
@venerik 给出的答案让我接近解决方案。当我应用他的示例代码时......
[SwaggerOperation(Tags = new []{"Subscribers", "Organizations"})]
...这会导致 Swagger 列表看起来像这样:
简而言之,“地址”端点现在出现在我想要的标题下,但是,正如红色箭头所示,它们现在也被“交叉列出”;我不希望“订阅者”端点列在“组织”端点下。
我怀疑 [SwaggerOperationFilter] 可能是答案的“另一半”,如果我可以让它删除交叉列出的条目。我以前没有玩过这个机制。
Angst
另外,非常不幸的是 [SwaggerOperation] 只能应用于方法/操作。我宁愿将其应用到课程本身:
[Route("api/Subscribers/{id}/[controller]")]
[Route("api/Organizations/{id}/[controller]")]
[SwaggerOperation(Tags = new []{"Subscribers", "Organizations"})]
public class AddressesController : Controller
{
有什么补救办法吗?