配置Swashbuckle(OpenAPI)忽略模型中的命名空间
解决Swashbuckle只显示模型名而非完整命名空间的问题
要让Swagger页面的Model区域只显示模型名称(比如把MyNamespace.SubFolder.MyModel简化为MyModel),你只需要在配置Swashbuckle时自定义SchemaId的生成逻辑即可,下面分常见场景给出具体实现:
.NET 6+(Top-level语句,Program.cs)
在配置Swagger服务的代码段中,修改AddSwaggerGen的配置项:
builder.Services.AddSwaggerGen(options => { // 自定义SchemaId生成规则,仅返回类型的名称 options.CustomSchemaIds(type => type.Name); });
旧版.NET(Startup.cs)
如果项目采用传统Startup.cs结构,在ConfigureServices方法中配置:
services.AddSwaggerGen(options => { options.CustomSchemaIds(type => type.Name); });
额外注意
如果你的项目存在不同命名空间下的同名模型,直接取type.Name会导致Swagger Schema冲突。这种情况可以调整逻辑,在保证名称简洁的同时避免冲突,比如:
options.CustomSchemaIds(type => // 核心命名空间下的模型直接用原名,其他的加最后一级命名空间作为前缀 type.Namespace.StartsWith("MyProject.Core") ? type.Name : $"{type.Namespace.Split('.').Last()}.{type.Name}" );
内容的提问来源于stack exchange,提问作者惟megaMan
相关产品推荐
相关产品推荐

