dotnetcore 3.0でボディコンテンツが必要であることをSwashbuckle 5に伝えるにはどうすればよいですか?

ajtatum

Swashbuckle 5を実装しようとしていますが、次のようにリクエスト本文を読み取るメソッドがいくつかあります。

var requestBody = await Request.GetRawBodyStringAsync();

人々が私のAPIをテストできるように、Swashbuckle / Swaggerにそれをパラメーターとして読み取るように指示するにはどうすればよいですか?ここで非常によく似た質問がされているのを見ましたが、それはバイナリコンテンツと以前のバージョンのSwashbuckleに関するものでした。

どんな助けでも大歓迎です!

AlesD

Swashbuckle 5ですでに発見したように、Microsoft OpenApi.NETSDKの使用に切り替えたため異なりますこれが、オブジェクトモデルが異なる理由です。それ以外の場合は、リンクした投稿のサンプルと同じように機能します。ケースを、生のテキスト文字列を送信するシナリオに翻訳しました。

生の文字列を読み取るメソッドにフラグを立てるカスタム属性を作成します。例えば:

public class RawTextRequestAttribute : Attribute
{
   public RawTextRequestAttribute()
   {
      MediaType = "text/plain";
   }

   public string MediaType { get; set; }
}

Swagger定義を変更するには、この属性をチェックするSwashbuckle操作フィルターが必要です。見つかった場合は、リクエストの本文をプレーンな文字列にカスタマイズします。これを行うためのサンプル実装を次に示します。

public class RawTextRequestOperationFilter : IOperationFilter
{
   public void Apply(OpenApiOperation operation, OperationFilterContext context)
   {
      RawTextRequestAttribute rawTextRequestAttribute = context.MethodInfo.GetCustomAttributes(true)
         .SingleOrDefault((attribute) => attribute is RawTextRequestAttribute) as RawTextRequestAttribute;
      if (rawTextRequestAttribute != null)
      {
         operation.RequestBody = new OpenApiRequestBody();
         operation.RequestBody.Content.Add(rawTextRequestAttribute.MediaType, new OpenApiMediaType() 
         {
            Schema = new OpenApiSchema()
            {
               Type = "string"
            }
         });
      }
   }
}

使用するフィルターを使用するには、Swaggerを構成するときにスタートアップにフィルターを登録する必要があります。

public void ConfigureServices(IServiceCollection services)
{
   services.AddControllers();
   services.AddSwaggerGen(c =>
   {
      c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
      c.OperationFilter<RawTextRequestOperationFilter>();
   });
}

次に、生のリクエストを読み取るメソッドに属性を追加します。例えば:

[HttpPost]
[RawTextRequest]
public async Task Post()
{
   var requestBody = await Request.GetRawBodyStringAsync();
   _logger.LogDebug(requestBody);
}

その結果、SwaggerUIでリクエストの本文のテキスト入力ボックスが表示されます。

Swagger UI

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ボディコンテンツが必要であることをSwashbuckleに伝えるにはどうすればよいですか?

分類Dev

Http.sysとURLPrefixを使用しながらReactSPAを提供するようにdotnetcore 3を構成するにはどうすればよいですか?

分類Dev

ArchLinuxにDotNetCoreをインストールするにはどうすればよいですか

分類Dev

LinuxのdotnetcoreでGUIを作成するにはどうすればよいですか?

分類Dev

Cake Builderでカスタム引数を指定するにはどうすればよいですか?(DotNetCore)

分類Dev

正しいDotNetCoreがビルドに含まれていることを確認するにはどうすればよいですか?

分類Dev

JavaのTreeSetまたはHashMapに、そのコンテンツにインデックスが付けられる順序が挿入順序であることを伝えるにはどうすればよいですか(LinkedHashMapは必要ありません)。

分類Dev

Bootstrap3とnavbar、このliタグを右に揃えるにはどうすればよいですか?

分類Dev

Riderでdotnetcoreアプリを実行しているときにログを表示するにはどうすればよいですか?

分類Dev

dotnetcoreのドメインユーザーに属していないユーザーを認証するにはどうすればよいですか?

分類Dev

Tensorflow 3テンソルの行/列を並べ替えるにはどうすればよいですか?

分類Dev

ブートストラップ3のグリッド要素のコンテンツを垂直方向に揃えるにはどうすればよいですか?

分類Dev

条件が数値であることを指定するにはどうすればよいですか。sqlite3

分類Dev

Sublime Text 3でHTML5とCSS3を使用するにはどうすればよいですか?

分類Dev

NugetパッケージでファイルをDotNetCoreプロジェクトにコピーするにはどうすればよいですか?

分類Dev

間にテキストがある3つのコンマごとに文字列を分割するにはどうすればよいですか?

分類Dev

たとえば、ヘッダー行が3つある複数のシートにデータを分割するにはどうすればよいですか?

分類Dev

この構文を可能にするにはどうすればよいですか:var a =(5).plus(3).minus(6); // 2

分類Dev

SublimeTextでPython2からPython3に切り替えるにはどうすればよいですか

分類Dev

Elmで3つのフォームを垂直に揃えるにはどうすればよいですか?

分類Dev

Razor mvc5の3列ごとに行を作成するにはどうすればよいですか?

分類Dev

配列が完全であることをObservableに伝えるにはどうすればよいですか

分類Dev

GTK3をWindows7でネイティブに見えるようにするにはどうすればよいですか?

分類Dev

Python.hがどこにあるかをBazelに伝えるにはどうすればよいですか?

分類Dev

TomcatがどこにあるかをMavenに伝えるにはどうすればよいですか?

分類Dev

CSS3 / HTML5でタイトルをビデオ背景の中央に揃えるにはどうすればよいですか?

分類Dev

コードがgnumakeの-o3でコンパイルされていることを確認するにはどうすればよいですか?

分類Dev

CSSを使用して3つの列を中央に揃えるにはどうすればよいですか?

分類Dev

Spring 3.xから5.xに移行するにはどうすればよいですか?

Related 関連記事

  1. 1

    ボディコンテンツが必要であることをSwashbuckleに伝えるにはどうすればよいですか?

  2. 2

    Http.sysとURLPrefixを使用しながらReactSPAを提供するようにdotnetcore 3を構成するにはどうすればよいですか?

  3. 3

    ArchLinuxにDotNetCoreをインストールするにはどうすればよいですか

  4. 4

    LinuxのdotnetcoreでGUIを作成するにはどうすればよいですか?

  5. 5

    Cake Builderでカスタム引数を指定するにはどうすればよいですか?(DotNetCore)

  6. 6

    正しいDotNetCoreがビルドに含まれていることを確認するにはどうすればよいですか?

  7. 7

    JavaのTreeSetまたはHashMapに、そのコンテンツにインデックスが付けられる順序が挿入順序であることを伝えるにはどうすればよいですか(LinkedHashMapは必要ありません)。

  8. 8

    Bootstrap3とnavbar、このliタグを右に揃えるにはどうすればよいですか?

  9. 9

    Riderでdotnetcoreアプリを実行しているときにログを表示するにはどうすればよいですか?

  10. 10

    dotnetcoreのドメインユーザーに属していないユーザーを認証するにはどうすればよいですか?

  11. 11

    Tensorflow 3テンソルの行/列を並べ替えるにはどうすればよいですか?

  12. 12

    ブートストラップ3のグリッド要素のコンテンツを垂直方向に揃えるにはどうすればよいですか?

  13. 13

    条件が数値であることを指定するにはどうすればよいですか。sqlite3

  14. 14

    Sublime Text 3でHTML5とCSS3を使用するにはどうすればよいですか?

  15. 15

    NugetパッケージでファイルをDotNetCoreプロジェクトにコピーするにはどうすればよいですか?

  16. 16

    間にテキストがある3つのコンマごとに文字列を分割するにはどうすればよいですか?

  17. 17

    たとえば、ヘッダー行が3つある複数のシートにデータを分割するにはどうすればよいですか?

  18. 18

    この構文を可能にするにはどうすればよいですか:var a =(5).plus(3).minus(6); // 2

  19. 19

    SublimeTextでPython2からPython3に切り替えるにはどうすればよいですか

  20. 20

    Elmで3つのフォームを垂直に揃えるにはどうすればよいですか?

  21. 21

    Razor mvc5の3列ごとに行を作成するにはどうすればよいですか?

  22. 22

    配列が完全であることをObservableに伝えるにはどうすればよいですか

  23. 23

    GTK3をWindows7でネイティブに見えるようにするにはどうすればよいですか?

  24. 24

    Python.hがどこにあるかをBazelに伝えるにはどうすればよいですか?

  25. 25

    TomcatがどこにあるかをMavenに伝えるにはどうすればよいですか?

  26. 26

    CSS3 / HTML5でタイトルをビデオ背景の中央に揃えるにはどうすればよいですか?

  27. 27

    コードがgnumakeの-o3でコンパイルされていることを確認するにはどうすればよいですか?

  28. 28

    CSSを使用して3つの列を中央に揃えるにはどうすればよいですか?

  29. 29

    Spring 3.xから5.xに移行するにはどうすればよいですか?

ホットタグ

アーカイブ