web-dev-qa-db-ja.com

Swagger-Web API-オプションのクエリパラメーター

[HttpGet]
[Route("students")]
[SwaggerOperation(Tags = new[] { "Student" })]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(ResponseModel<IList<Student>>))]
[SwaggerResponseExample(HttpStatusCode.OK, typeof(StudentResponseExample))]
[SwaggerResponse(HttpStatusCode.InternalServerError)]
public IHttpActionResult SearchStudent()
    {
        IDictionary<string, string> searchParams = null;
        searchParams = ControllerContext.GetQueryStrings();
        .
        .
        .

    }

上記のAPIには、クエリ文字列として渡される3つのオプションパラメータがあります。

  1. SyncDate-長い
  2. オフセット-整数
  3. 制限-整数

ユーザーがこれらのオプションのクエリパラメーターをSwagger UIに入力するオプションはありません。オプションのクエリパラメータを実装するように案内してください。

私はスワッシュバックルを使用しており、Swagger機能のために各APIメソッドよりも長いコメントセクションではなく、アノテーションを使用することを好みます。

次の Swagger Specsへのクエリ文字列パラメーターの追加 を参照して、SwaggerParameterAttributeクラスをFiltersに作成しましたWeb APIのフォルダーで、OperationFilterをGlobalConfiguration.Configuration .EnableSwaggerに追加しようとすると、タイプまたは名前空間名SwaggerParametersAttributeHandlerが見つかりませんでした。 Filtersフォルダーの名前空間も追加しましたが、それでもエラーは存在します。

Swaggerでオプションのクエリパラメーターを実装する方法について説明してください

6
Gopi

Swaggerの動作方法は、アクションのシグネチャに基づいてパラメーターを引き出します。つまり、アクションへのパラメーターですが、ここでは明らかにSwaggerが認識しないControllerContextからこれらの値を取得しています。

したがって、アクションのシグネチャを変更し、そこにパラメーターを渡す必要があります。

Null許容型にした場合、それらはオプションとして扱われます-

[HttpGet]
[Route("students")]
[SwaggerOperation(Tags = new[] { "Student" })]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(ResponseModel<IList<Student>>))]
[SwaggerResponseExample(HttpStatusCode.OK, typeof(StudentResponseExample))]
[SwaggerResponse(HttpStatusCode.InternalServerError)]
public IHttpActionResult SearchStudent(long? SyncDate = null,int? OffSet = null,int? Limit = null)
    {
        // Use the variables now here
        .
        .
        .

    }
9
Ipsit Gaur

これは私のために働きました:

[System.Web.Http.HttpGet] 
[Route("api/DoStuff/{reqParam}")]  
[Route("api/DoStuff/{reqParam}/{optParam1:alpha?}/{optParam2:datetime?}")]
public string Get(string reqParam, string optParam1= "", string optParam2= "")

Swagger UIに2つのセクションを作成しましたが、それでうまくいきました。

1
Manuel Plaza