gpt4 book ai didi

c# - ASP.NET Core 3.0/Swashbuckle : restrict responses content types globally

转载 作者:行者123 更新时间:2023-12-03 19:43:37 26 4
gpt4 key购买 nike

这与 How do I set or remove the Default Response Content Type Using SwashBuckle 的问题基本相同, 但对于 .NET Core 3.0

默认情况下,在 .NET Core 3.0 中,您使用 services.AddControllers() 配置 Web api然后你用 services.AddSwaggerGen() 用 swashbuckle 配置 swagger + app.UseSwagger()
这工作正常,但是 swagger.json 包含每个操作的多种响应内容类型(text/plain + application/json + text/json)

I know我可以通过添加 [Produces] 来限制这些响应内容类型和 [Consumes]到我的操作,但我想避免每次操作都这样做(即我想在全局范围内这样做)

请注意,我最好使用 System.Text.Json,但如果您有一个仅适用于 Newtonsoft.JSON 的解决方案,那么它总比没有好;)

最佳答案

Swashbuckle.AspNetCore.SwaggerGen 5.0 使用 OpenApiOperation来描述 API 操作。

using System.Collections.Generic;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;

public class AssignContentTypeFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Responses.ContainsKey("200"))
{
operation.Responses.Clear();
}

var data = new OpenApiResponse
{
Description = "Ok",
Content = new Dictionary<string, OpenApiMediaType>
{
["application/json"] = new OpenApiMediaType(),
["application/xml"] = new OpenApiMediaType(),
}
};

operation.Responses.Add("200", data);
}
}

在 Startup.cs 中
        services.AddSwaggerGen(q =>
{
q.SwaggerDoc("v1", new OpenApiInfo
{
Title = "mytitle",
Version = "v1",
});
q.OperationFilter<AssignContentTypeFilter>();
});

关于c# - ASP.NET Core 3.0/Swashbuckle : restrict responses content types globally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58973329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com