2017-11-03 12 views
0

JSクライアントの生成にswashbuckleを使用したasp.netコアプロジェクトがあります。 ページネーションを使用するには、X.PagedList nugetのPagedListを使用します。 コントローラの実装:Swagedbuckleの応答がIPagedListで間違っています<T>

[HttpGet] 
[ProducesResponseType(typeof(IPagedList<Model>), 200)] 
[ProducesResponseType(typeof(void), 500)] 
public async Task<IActionResult> Get([FromQuery]query) 
{ 
    var response = await this.mediator.Send(query); 

    return Ok(response.Results); // results is IPagedList<Model> 
} 

結果JSONでは、次のようになります。

{ 
    "count": 10, 
    "pageCount": 2, 
    "totalItemCount": 15, 
    "pageNumber": 1, 
    "pageSize": 10, 
    "hasPreviousPage": false, 
    "hasNextPage": true, 
    "isFirstPage": true, 
    "isLastPage": false, 
    "firstItemOnPage": 1, 
    "lastItemOnPage": 10, 
    "items": [ 
     { 
      "guid": "dafa9d3b-9ee2-4cbc-b7d7-902b5bc9e887", 
      "name": "asdf", 
      "number": 1006, 
     } 
    ] 
} 

何とか闊歩結果はモデルの配列のように見えると考えて:

[ 
    { 
    "guid": "string", 
    "name": "string", 
    "number": 0, 
    } 
] 

私も

てみました
[SwaggerResponse(200, Type = typeof(IPagedList<Model>))] 

成功なし。

XPagedList 7.1.0 Swashbuckle.AspNetCore.Swagger 1.0.0

私は出力を上書きすることができます方法はありますか? コードが間違っていると、クライアントコードの生成が役に立たなくなります。

EDIT: ありカスタムJsonConverterがPagedList

services.AddMvc().AddControllersAsServices().AddJsonOptions(options => 
{ 
    options.SerializerSettings.NullValueHandling = NullValueHandling.Include; 
    options.SerializerSettings.Converters.Add(new CustomIEnumerableConverter(new[] {"X.PagedList"})); 
}); 

ためである。しかし、私は理解しSwashbuckleが同じJsonSerializerを使用する必要があります。

答えて

1

あなたがIDocumentFilterを使用することができ、出力を上書きしたい場合は、私がここにいくつかの例があります: SwashbuckleTest/blob/master/Swagger_Test/App_Start/SwaggerConfig.cs


あなたの応答はそれらが表示されないはずですcount, pageCount, totalItemCount示し、なぜ今、私はわからないんだけど応答に、私がテストにコントローラを作成しました:

public class PagedListController : ApiController 
{ 
    // GET: api/PagedList 
    public IPagedList<Company> Get() 
    {   
     return PagedCompany; 
    } 

    // GET: api/PagedList/5 
    [SwaggerResponse(200, Type = typeof(IPagedList<Company>))] 
    public async Task<IHttpActionResult> Get(int id) 
    { 
     return Ok(PagedCompany); 
    } 

    private IPagedList<Company> PagedCompany 
    { 
     get 
     { 
      var data = new List<Company>(); 
      for (int i = 0; i < 10; i++) 
       data.Add(new Company { Id = i, Name = i.ToString() }); 
      return new PagedList<Company>(data, 1, 3); 
     } 
    } 
} 

と応答は、あなたがここでそれを試すことができているものをあなたのいずれかを持っていない: を

+0

なぜこれらのプロパティをプライベートにする必要がありますか?私は問題なくコントローラにアクセスできます。セッターはありませんがゲッターがあります – Andre

+0

おそらく私は間違っているかもしれませんが、プライベートではないかもしれませんが、私の例では表示されません... – HelderSepu

+0

私はクローンできるGitHubに関する完全なプロジェクトはありますか? _これは私のものです:https://github.com/heldersepu/Swashbuckleテスト – HelderSepu

関連する問題