C#-MVC的Swagger对重复的架构ID(类型名重复)报错问题

本文探讨了Swagger在生成API文档时遇到的重复架构ID异常问题,提供了两种解决方案:一是避免同名类型引用,二是启用使用完整类型名称的配置设置。通过调整配置,可以有效解决Swagger生成过程中出现的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swagger异常

{"Message":"出现错误。","ExceptionMessage":"Conflicting schemaIds: Duplicate schemaIds detected for types Lunz.Services.CarHr.Model.City and Lunz.Services.CarHr.Model.Enterprise.City. See the config setting - \"UseFullTypeNameInSchemaIds\" for a potential workaround","ExceptionType":"System.InvalidOperationException","StackTrace":"   在 Swashbuckle.Swagger.SchemaRegistry.CreateRefSchema(Type type)\r\n   在 Swashbuckle.Swagger.SchemaRegistry.CreateInlineSchema(Type type)\r\n   在 Swashbuckle.Swagger.SchemaRegistry.CreateArraySchema(JsonArrayContract arrayContract)\r\n   在 Swashbuckle.Swagger.SchemaRegistry.CreateInlineSchema(Type type)\r\n   在 Swashbuckle.Swagger.SchemaRegistry.<CreateObjectSchema>b__1f(JsonProperty prop)\r\n   在 System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)\r\n   在 Swashbuckle.Swagger.SchemaRegistry.CreateObjectSchema(JsonObjectContract jsonContract)\r\n   在 Swashbuckle.Swagger.SchemaRegistry.CreateDefinitionSchema(Type type)\r\n   在 Swashbuckle.Swagger.SchemaRegistry.GetOrRegister(Type type)\r\n   在 Swashbuckle.Swagger.SwaggerGenerator.CreateOperation(ApiDescription apiDesc, SchemaRegistry schemaRegistry)\r\n   在 Swashbuckle.Swagger.SwaggerGenerator.CreatePathItem(IEnumerable`1 apiDescriptions, SchemaRegistry schemaRegistry)\r\n   在 Swashbuckle.Swagger.SwaggerGenerator.<>c__DisplayClass7.<GetSwagger>b__4(IGrouping`2 group)\r\n   在 System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)\r\n   在 Swashbuckle.Swagger.SwaggerGenerator.GetSwagger(String rootUrl, String apiVersion)\r\n   在 Swashbuckle.Application.SwaggerDocsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n   在 System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n   在 System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n   在 System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n   在 System.Web.Http.Cors.CorsMessageHandler.<SendAsync>d__0.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n   在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   在 System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()"}

在这里插入图片描述

冲突的架构ID:为lunz.services.carhr.model.city和lunz.services.carhr.model.enterprise.city类型检测到重复的架构ID

根据错误提示,说明是有重复名的类型引用,尽管是不同命名空间下的。

解决

方案1:
类型重命名,不要有同名的类型,不管是不是同一命名空间下。
方案2:
1.SwaagerConfig.cs
寻找该行注释:c.UseFullTypeNameInSchemaIds();
可以看到其注释信息:
在这里插入图片描述
2.在其初始化中添加该行代码:
在这里插入图片描述

启动就好了。

对于Swagger来说,这种异常明显是能够支持的只不过默认没开启,大都都在下面注释里面,可以根据错误提示,去添加相应代码,以支持各种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值