4

ServiceStack での Swagger 統合に関する次の問題の解決策を探しています。

必要なプロパティ ID を持つ RequestObject があります。次のルートを提供したい:

[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 メンバー仕様を提供する方法、またはパスとクエリとして有効であることを定義する方法はありますか?

このような:

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

2 に答える 2

2

このような場合、2 つの別個の DTO クラスを作成して、Swagger で各ルートを正しく文書化するのを容易にするのが最も簡単だと思います。DTO クラスは、同一のプロパティ (Idこの場合は次のように見えます) と異なる属性を持つ場合がRouteありApiMemberます。各 DTO に 1 つずつ、合計 2 つのサービス メソッドがあり、共有メソッドを呼び出して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; }
}

もちろん、これは 2 つのルートの仕様になり、どちらも id クエリ パラメータまたはパス パラメータを受け入れます。

swagger-codegen を使用すると、残念ながら次のような呼び出しが作成されます。

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