web-dev-qa-db-ja.com

パラメータのデフォルト値を入れ替える

次のAPIから生成されたswaggerのプロパティのデフォルト値を定義するにはどうすればよいですか?

public class SearchQuery
{
        public string OrderBy { get; set; }

        [DefaultValue(OrderDirection.Descending)]
        public OrderDirection OrderDirection { get; set; } = OrderDirection.Descending;
}


public IActionResult SearchPendingCases(SearchQuery queryInput);

Swashbuckleは、必須パラメーターとしてOrderDirectionを生成します。私はそれをオプションにして、クライアントにデフォルト値を示したいと思います(swaggerがこれをサポートしているかどうかはわかりません)。

プロパティタイプをNULL可能にするのは好きではありません。他のオプションはありますか?組み込みクラスを使用するのが理想的です...

Swashbuckle.AspNetCoreを使用します- https://docs.Microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs=visual-studio

6
Liero

私は常に次のようにパラメータ自体にデフォルトを設定しています:

public class TestPostController : ApiController
{
    public decimal Get(decimal x = 989898989898989898, decimal y = 1)
    {
        return x * y;
    }
}

Swagger-uiでの表示は次のとおりです。
http://swashbuckletest.azurewebsites.net/swagger/ui/index#/TestPost/TestPost_Get


更新

リフレクションを介してDefaultValueAttributeを読み取るために Swagger-Net を更新したコメントに関する議論に続いて、使用しているサンプルクラスを次に示します。

public class MyTest
{
    [MaxLength(250)]
    [DefaultValue("HelloWorld")]
    public string Name { get; set; }
    public bool IsPassing { get; set; }
}

swagger jsonは次のようになります。

"MyTest": {
  "type": "object",
  "properties": {
    "Name": {
      "default": "HelloWorld",
      "maxLength": 250,
      "type": "string"
    },
    "IsPassing": {
      "type": "boolean"
    }
  },
  "xml": {
    "name": "MyTest"
  }
},

Swagger-Net のソースコードは次のとおりです。
https://github.com/heldersepu/Swagger-Net

また、テストプロジェクトのソースコードは次のとおりです。
https://github.com/heldersepu/SwashbuckleTest

4

コントローラーでデフォルトのパラメーター値を設定できる場合は、このように機能します

// GET api/products
[HttpGet]
public IEnumerable<Product> Get(int count = 50)
{
    Conn mySqlGet = new Conn(_connstring);
    return mySqlGet.ProductList(count);
}
2
Colbs