,可以通过自定义一个实现了IOperationFilter接口的类来实现。IOperationFilter接口定义了一个方法Apply,该方法在Swagger生成文档时会被调用。
首先,创建一个名为TitleFilter的类,实现IOperationFilter接口,并在Apply方法中添加筛选器逻辑。具体代码如下:
using System.Linq;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
public class TitleFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var titleAttribute = context.MethodInfo.DeclaringType.GetCustomAttributes(true)
.Union(context.MethodInfo.GetCustomAttributes(true))
.OfType<TitleAttribute>()
.FirstOrDefault();
if (titleAttribute != null)
{
operation.Summary = titleAttribute.Title;
}
}
}
在上述代码中,我们首先获取了当前操作所属的类型(控制器)上的TitleAttribute特性,如果存在,则将其Title属性赋值给操作的Summary属性。这样,在Swagger文档中就会显示出标题信息。
接下来,在Startup.cs文件的ConfigureServices方法中注册TitleFilter,以便Swagger能够使用它。具体代码如下:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
c.OperationFilter<TitleFilter>(); // 注册TitleFilter
});
// ...
}
在上述代码中,我们通过调用SwaggerGenOptions的OperationFilter方法注册了TitleFilter。
最后,在Startup.cs文件的Configure方法中启用Swagger中间件,以便能够访问Swagger UI。具体代码如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
// ...
}
在上述代码中,我们通过调用UseSwagger和UseSwaggerUI方法启用了Swagger中间件,并指定了Swagger文档的访问路径。
至此,我们已经成功在ASP .NET Core 3.1的Swagger中添加了标题筛选器。当你在控制器或操作上使用TitleAttribute特性,并设置了相应的标题,Swagger文档中的操作就会显示出标题信息。
领取专属 10元无门槛券
手把手带您无忧上云