Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 47519|Jawab: 4

[ASP.NET] ASP.NET lubang parameter default UI Swagger di Core(8).

[Salin tautan]
Diposting pada 08/05/2021 13.27.02 | | | |
Swagger adalah kerangka kerja preskriptif dan lengkap untuk membangun, mendeskripsikan, memanggil, dan memvisualisasikan layanan web gaya RESTful.

Tujuan keseluruhannya adalah agar klien dan sistem file diperbarui dengan kecepatan yang sama dengan server. Metode, parameter, dan model file terintegrasi erat ke dalam kode sisi server, memungkinkan API tetap sinkron setiap saat. Swagger tidak pernah membuatnya lebih mudah untuk menerapkan dan menggunakan API yang kuat.

resensi

ASP.NET Inti (7) Analisis mendalam dari kode sumber kerangka kerja
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI secara manual memperoleh metode penyuntikan objek
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (lima) didasarkan pada transaksi distribusi CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) memfilter validasi model ModelState terpadu
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Inti (iii) Membuat instans secara dinamis menggunakan ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Inti (2) Mulai ulang aplikasi dengan kode
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) menggunakan caching Redis
https://www.itsvse.com/thread-9393-1-1.html

Pertama, buat proyek baru ASP.NET Core 3.1 dan gunakan nuget untuk menginstal paket Swashbuckle.AspNetCore dengan perintah berikut:

Konfigurasikan layanan Swagger di file startup.cs sebagai berikut:

Metode ConfigureServices

Konfigurasikan metode

Buat pengontrol Pengujian baru dengan kode berikut:

Objek model parameter produk Antarmuka Buat Pengontrol Uji adalah sebagai berikut:

Setelah memulai proyek, akses:http://localhost:18979/swagger/index.html, seperti yang ditunjukkan pada gambar di bawah ini:



swagger.json Isinya adalah sebagai berikut:

{
  "openapi": "3.0.1",
  "info": {
    "title": "API Saya",
    "versi": "v1"
  },
  "jalur": {
    "/api/Test/Create": {
      "post": {
        "tags": [
          "Uji"
        ],
        "requestBody": {
          "konten": {
            "application/json": {
              "skema": {
                "$ref": "#/komponen/skema/Produk"
              }
            },
            "text/json": {
              "skema": {
                "$ref": "#/komponen/skema/Produk"
              }
            },
            "application/*+json": {
              "skema": {
                "$ref": "#/komponen/skema/Produk"
              }
            }
          }
        },
        "tanggapan": {
          "200": {
            "description": "Keberhasilan",
            "konten": {
              "text/plain": {
                "skema": {
                  "type": "string"
                }
              },
              "application/json": {
                "skema": {
                  "type": "string"
                }
              },
              "text/json": {
                "skema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "komponen": {
    "skema": {
      "Informasi": {
        "type": "objek",
        "properti": {
          "isDiskon": {
            "jenis": "boolean"
          },
          "isVip": {
            "jenis": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Produk": {
        "type": "objek",
        "properti": {
          "nama": {
            "type": "string",
            "nullable": true
          },
          "dinonaktifkan": {
            "jenis": "boolean"
          },
          "info": {
            "$ref": "#/komponen/skema/Informasi"
          }
        },
        "additionalProperties": false
      }
    }
  }
}



Kami menemukan bahwa tipe Boolean dan tipe Boolean yang dapat diterima null default ke: true,Dalam pengembangan harian, jika bool tidak ditetapkan, defaultnya harus false, dan jenis null harus default ke null, kami mencoba menggunakan keangkuhan untuk mensimulasikan komitmen, jika parameternya tidak diperhatikan,Kecelakaan rentan。 (Minggu lalu, saya menggunakan swagger untuk mensimulasikan bahwa parameter bool benar secara default, menyebabkan pesan WeChat didorong ke semua orang.)

Bagaimana cara menetapkan jenis Boolean ke false secara default? Bagaimana dengan jenis null yang ditetapkan null?

Buat kelas baru yang mewarisi dari ISchemaFilter, dan kodenya adalah sebagai berikut:

Dan saat menambahkan layanan swagger, tambahkan filter AddSwaggerGen sebagai berikut:

Untuk beberapa bidang bool khusus, nilai default perlu diatur ke true dan dapat ditambahkan[DefaultValue(true)]Ciri-cirinya adalah sebagai berikut:



{
  "name": "string",
  "dinonaktifkan": benar,
  "info": {
    "isDiscount": salah,
    "isVip": null
  }
}
swagger.json Filenya adalah sebagai berikut:
{
  "openapi": "3.0.1",
  "info": {
    "title": "API Saya",
    "versi": "v1"
  },
  "jalur": {
    "/api/Test/Create": {
      "post": {
        "tags": [
          "Uji"
        ],
        "requestBody": {
          "konten": {
            "application/json": {
              "skema": {
                "$ref": "#/komponen/skema/Produk"
              }
            },
            "text/json": {
              "skema": {
                "$ref": "#/komponen/skema/Produk"
              }
            },
            "application/*+json": {
              "skema": {
                "$ref": "#/komponen/skema/Produk"
              }
            }
          }
        },
        "tanggapan": {
          "200": {
            "description": "Keberhasilan",
            "konten": {
              "text/plain": {
                "skema": {
                  "type": "string"
                }
              },
              "application/json": {
                "skema": {
                  "type": "string"
                }
              },
              "text/json": {
                "skema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "komponen": {
    "skema": {
      "Informasi": {
        "type": "objek",
        "properti": {
          "isDiskon": {
            "jenis": "boolean",
            "default": false
          },
          "isVip": {
            "jenis": "boolean",
            "default": null,
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Produk": {
        "type": "objek",
        "properti": {
          "nama": {
            "type": "string",
            "nullable": true
          },
          "dinonaktifkan": {
            "jenis": "boolean",
            "default": true
          },
          "info": {
            "$ref": "#/komponen/skema/Informasi"
          }
        },
        "additionalProperties": false
      }
    }
  }
}

(Akhir)






Mantan:Java menggunakan JDBC untuk menghubungkan masalah URL sqlite
Depan:Kafka secara manual mengatur offset offset
Diposting pada 22/09/2021 20.45.47 |
Belajar untuk belajar...
Diposting pada 22/09/2021 20.59.49 |
Belajar belajar, besi tua, ada begitu banyak pembaruan, saya tidak bisa mengikutinya
Diposting pada 16/05/2023 11.22.31 |
RE: ASP.NET Core(八) 之 Swagger UI 默认参数的坑 [修改]
Mode lanjutan
Diposting pada 16/05/2023 17.20.36 |
Belajar belajar
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com