我正在寻找以下问题的解决方案,关于ServiceStack中的Swagger集成。
我的RequestObject具有必需的Property 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 Attribute不允许将其指定为ParameterType'path'或'query'。
来源:https://gist.github.com/JohannesFerner/5317496
有没有办法,提供API-Member规范,特别是相应的Route,或者定义它是valdid作为路径和查询?
像这样:
[ApiMember(Name = "Id", ParameterType="path,query", Description = "User Id", DataType = "int", IsRequired = true)]
答案 0 :(得分:2)
在这种情况下,我发现最简单的方法是创建两个单独的DTO类,以便在Swagger中正确记录每个路径。 DTO类可能具有相同的属性(在这种情况下为Id
,看起来像),以及不同的Route
和ApiMember
属性。您将拥有两个服务方法,每个DTO一个,并且可以调用共享方法,传入Id
属性的值,这样就不会重复实现大部分实现。
答案 1 :(得分: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)