この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 47519|答える: 4

[ASP.NET] Core(8)のSwagger UIのデフォルトパラメータの穴 ASP.NET。

[リンクをコピー]
掲載地 2021/05/08 13:27:02 | | | |
Swaggerは、RESTfulスタイルのウェブサービスの構築、記述、呼び出し、可視化のための規範的かつ完全なフレームワークです。

全体的な目標は、クライアントとファイルシステムがサーバーと同じ速度で更新することです。 ファイルのメソッド、パラメータ、モデルはサーバーサイドのコードに密接に統合されており、API同士が常に同期を保つことができます。 Swaggerは強力なAPIの展開や利用をこれまでになく簡単にしました。

復習

ASP.NET コア(7) フレームワークソースコードの詳細な分析
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DIはオブジェクト注入の方法を手動で取得します
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET コア(5)はCAP分散トランザクションに基づいています
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) フィルター 統一モデルステートモデル検証
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET コア(iii) ActivatorUtilitiesを用いて動的にインスタンスを作成する
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET コア(2) コードによるアプリケーションの再起動
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core(1)はRedisキャッシュを使用しています
https://www.itsvse.com/thread-9393-1-1.html

まず、Core 3.1 ASP.NET 新しいプロジェクトを作成し、nugetを使って以下のコマンドでSwashbuckle.AspNetCoreパッケージをインストールします。

startup.csファイル内のSwaggerサービスを次のように設定します:

ConfigureServicesメソッド

構成メソッド

以下のコードで新しいテストコントローラを作成します:

テストコントローラのインターフェース作成製品パラメータモデルオブジェクトは以下の通りです:

プロジェクト開始後、以下にアクセスできます:http://localhost:18979/swagger/index.html、下図に示されているように:



swagger.json 内容は以下の通りです:

{
  「openAPI」: "3.0.1",
  「情報」:{
    「title」:「My API」、
    「バージョン」:「V1」
  },
  「パス」:{
    "/api/Test/Create": {
      「投稿」:{
        「タグ」: [
          「テスト」
        ],
        "requestBody": {
          「内容」:{
            "application/json": {
              「スキーマ」:{
                「$ref」:「#/components/schemas/Product」
              }
            },
            "text/json": {
              「スキーマ」:{
                「$ref」:「#/components/schemas/Product」
              }
            },
            "application/*+json": {
              「スキーマ」:{
                「$ref」:「#/components/schemas/Product」
              }
            }
          }
        },
        「レスポンス」:{
          "200": {
            「説明」:「成功」、
            「内容」:{
              「テキスト/プレーン」: {
                「スキーマ」:{
                  「タイプ」:「文字列」
                }
              },
              "application/json": {
                「スキーマ」:{
                  「タイプ」:「文字列」
                }
              },
              "text/json": {
                「スキーマ」:{
                  「タイプ」:「文字列」
                }
              }
            }
          }
        }
      }
    }
  },
  「コンポーネント」: {
    「スキーマ」:{
      「情報」:{
        「type」:「オブジェクト」、
        「プロパティ」:{
          「isDiscount」: {
            「タイプ」:「ブール」
          },
          「isVip」: {
            「タイプ」:「ブール」
            「nullable」:真
          }
        },
        「additionalProperties」:false
      },
      「製品」:{
        「type」:「オブジェクト」、
        「プロパティ」:{
          「名前」:{
            「type」:「string」、
            「nullable」:真
          },
          「disabled」:{
            「タイプ」:「ブール」
          },
          「情報」:{
            「$ref」:「#/components/schemas/Information」
          }
        },
        「additionalProperties」:false
      }
    }
  }
}



ブール型もnullable Boolean 型もデフォルトでtrueであることがわかりました。日々の開発では、ブールが割り当てられていない場合、デフォルトはfalse、null型はnullにすべきですパラメータが気づかない場合は、コミットをシミュレートするためにswaggerを使おうとします。事故は起こりやすいものです。 (先週、swaggerを使ってブールパラメータがデフォルトで真であることをシミュレートし、WeChatのメッセージが全人に配信されました。)

ブール型をデフォルトでfalseに割り当てるにはどうすればいいですか? null型にnullを割り当てるのはどうでしょうか?

ISchemaFilterから継承する新しいクラスを作成し、そのコードは以下の通りです。

そしてswaggerサービスを追加する際は、以下のようにフィルターAddSwaggerGenを追加してください:

特定のブールフィールドでは、デフォルト値をtrueに設定し、追加することができます[DefaultValue(true)]特徴は以下の通りです。



{
  「名前」:「文字列」、
  「disabled」:真、
  「情報」:{
    「isDiscount」:false、
    「isVip」:null
  }
}
swagger.json ファイルは以下の通りです:
{
  「openAPI」: "3.0.1",
  「情報」:{
    「title」:「My API」、
    「バージョン」:「V1」
  },
  「パス」:{
    "/api/Test/Create": {
      「投稿」:{
        「タグ」: [
          「テスト」
        ],
        "requestBody": {
          「内容」:{
            "application/json": {
              「スキーマ」:{
                「$ref」:「#/components/schemas/Product」
              }
            },
            "text/json": {
              「スキーマ」:{
                「$ref」:「#/components/schemas/Product」
              }
            },
            "application/*+json": {
              「スキーマ」:{
                「$ref」:「#/components/schemas/Product」
              }
            }
          }
        },
        「レスポンス」:{
          "200": {
            「説明」:「成功」、
            「内容」:{
              「テキスト/プレーン」: {
                「スキーマ」:{
                  「タイプ」:「文字列」
                }
              },
              "application/json": {
                「スキーマ」:{
                  「タイプ」:「文字列」
                }
              },
              "text/json": {
                「スキーマ」:{
                  「タイプ」:「文字列」
                }
              }
            }
          }
        }
      }
    }
  },
  「コンポーネント」: {
    「スキーマ」:{
      「情報」:{
        「type」:「オブジェクト」、
        「プロパティ」:{
          「isDiscount」: {
            「タイプ」:「ブール」
            「default」:false
          },
          「isVip」: {
            「タイプ」:「ブール」
            「デフォルト」:null、
            「nullable」:真
          }
        },
        「additionalProperties」:false
      },
      「製品」:{
        「type」:「オブジェクト」、
        「プロパティ」:{
          「名前」:{
            「type」:「string」、
            「nullable」:真
          },
          「disabled」:{
            「タイプ」:「ブール」
            「デフォルト」:真
          },
          「情報」:{
            「$ref」:「#/components/schemas/Information」
          }
        },
        「additionalProperties」:false
      }
    }
  }
}

(終わり)






先の:JavaはJDBCを使ってsqliteのURL接続の問題を扱っています
次に:カフカは手動でオフセットオフセットを設定します
掲載地 2021/09/22 20:45:47 |
学ぶことを...
掲載地 2021/09/22 20:59:49 |
学ぶこと、古い鉄、アップデートが多すぎてついていけない
掲載地 2023/05/16 11:22:31 |
RE: ASP.NET Core(八) 之 Swagger UI 默认参数的坑 [修改]
上級モード
掲載地 2023/05/16 17:20:36 |
学ぶために
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com