4

我正在寻找有关 ServiceStack 中的 Swagger 集成的以下问题的解决方案。

我的 RequestObject 具有必需的属性 ID。我想提供以下路线:

[Route("/User/byId/{Id}", "GET", Summary = @"test", Notes = "test")]
[Route("/User/byId", "GET", Summary = @"test", Notes = "test")]

基本上,这应该留下在查询字符串中提供 Id 或作为 ServiceConsumer 的路径的选择。

Swagger UI 正确显示了 2 条路由,但无法对两种方式进行测试,因为 API-Member 属性不允许将其指定为 ParameterType 'path' 或 'query'。

来源:https ://gist.github.com/JohannesFerner/5317496

有什么方法可以提供 API 成员规范,特别是针对相应的 Route,或者将其定义为有效的路径和查询?

像这样:

[ApiMember(Name = "Id", ParameterType="path,query", Description = "User Id",  DataType = "int", IsRequired = true)]
4

2 回答 2

2

在这种情况下,我发现创建两个单独的 DTO 类以方便在 Swagger 中正确记录每条路线是最容易的。DTO 类可能具有相同的属性(Id在这种情况下,看起来像),以及不同的RouteApiMember属性。您将有两个服务方法,每个 DTO 一个,它们可以调用一个共享方法,传递Id属性的值,这样就不会重复大部分实现。

于 2013-06-27T03:24:11.563 回答
1

您可以多次提供 ApiMember。所以扩展你的例子:

[Route("/User/byId/{Id}", "GET", Summary = @"test", Notes = "test")]
[Route("/User/byId", "GET", Summary = @"test", Notes = "test")]
public class TestRoute
{
    [ApiMember(Name = "Id", ParameterType="path", Description = "User Id",  DataType = "int", IsRequired = false)]
    [ApiMember(Name = "Id", ParameterType="query", Description = "User Id",  DataType = "int", IsRequired = false)]
    public int Id { get; set; }
}

这当然会导致两条路线的规范,都接受 id 查询参数或路径参数。

如果您使用 swagger-codegen,不幸的是,这将创建一个如下所示的调用:

public GetTestId(int Id1, int Id2 = null)
于 2016-06-24T02:37:24.907 回答