Swashbuckle 5を実装しようとしていますが、次のようにリクエスト本文を読み取るメソッドがいくつかあります。
var requestBody = await Request.GetRawBodyStringAsync();
人々が私のAPIをテストできるように、Swashbuckle / Swaggerにそれをパラメーターとして読み取るように指示するにはどうすればよいですか?ここで非常によく似た質問がされているのを見ましたが、それはバイナリコンテンツと以前のバージョンのSwashbuckleに関するものでした。
どんな助けでも大歓迎です!
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でリクエストの本文のテキスト入力ボックスが表示されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加