如何在ASP.NET Core中覆盖默认路由?Swagger文档路由修改问题
解决方案:用DocumentFilter清空端点路径,保留数据契约
要实现只展示数据契约(请求/响应模型)、隐藏所有端点的需求,直接用DocumentFilter修改Swagger文档的核心结构即可,之前没找到方法可能是没触碰到Paths集合的修改逻辑。
1. 实现自定义DocumentFilter
创建一个过滤器类,直接清空Swagger文档里的所有端点路径,同时保留Components.Schemas(也就是你的数据契约):
using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; public class HideEndpointsDocumentFilter : IDocumentFilter { public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { // 清空所有端点路径,只保留数据契约 swaggerDoc.Paths.Clear(); // 可选:如果需要只保留特定模型,可在这里筛选Schemas // var targetSchemas = new List<string> { "UserDto", "OrderRequest" }; // swaggerDoc.Components.Schemas = swaggerDoc.Components.Schemas // .Where(kv => targetSchemas.Contains(kv.Key)) // .ToDictionary(kv => kv.Key, kv => kv.Value); } }
2. 注册过滤器
在Startup.cs(或Program.cs,.NET 6+)的Swagger配置中添加这个过滤器:
services.AddSwaggerGen(options => { // 其他Swagger配置(比如文档标题、版本等)... options.DocumentFilter<HideEndpointsDocumentFilter>(); });
效果说明
配置完成后,Swagger UI里只会显示Models板块(你的数据契约),所有端点的路径、请求方法都会被隐藏,完全匹配你“仅展示数据契约”的需求。
如果只是想替换路径而非完全隐藏,也可以在Apply方法里遍历swaggerDoc.Paths,把每个路径的Key替换成占位符(比如""或"---"),但清空Paths是最直接满足“不显示端点”需求的方式。
内容的提问来源于stack exchange,提问作者Karthik M S
相关产品推荐
相关产品推荐

