Chr*_*lin 5 c# swashbuckle asp.net-core asp.net-core-3.0
这与How do I set or remove the Default Response Content Type Using SwashBuckle基本相同,但对于 .NET Core 3.0
默认情况下,在 .NET Core 3.0 中,你配置了一个 web api,services.AddControllers()然后你配置了 swagger with swashbuckle with services.AddSwaggerGen()+app.UseSwagger()
这工作正常,但是 swagger.json 包含每个操作的多种响应内容类型(text/plain + application/json + text/json)
我知道我可以通过添加[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);
}
}
Run Code Online (Sandbox Code Playgroud)
在 Startup.cs 中
services.AddSwaggerGen(q =>
{
q.SwaggerDoc("v1", new OpenApiInfo
{
Title = "mytitle",
Version = "v1",
});
q.OperationFilter<AssignContentTypeFilter>();
});
Run Code Online (Sandbox Code Playgroud)
internal class AssignContentTypeFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
operation.Consumes.Clear();
operation.Consumes.Add("application/json");
operation.Produces.Clear();
operation.Produces.Add("application/json");
}
}
Run Code Online (Sandbox Code Playgroud)
然后
services.AddSwaggerGen(cfg => cfg.OperationFilter<AssignContentTypeFilter>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |