使用Web API并使用swashbuckle生成swagger文档,
我在两个不同的命名空间中定义了两个具有相同名称的不同类。当我在浏览器中打开 swagger 页面时,它显示
schemaId 冲突:检测到类型 A 和 B 的 schemaId 重复。请参阅配置设置 - “UseFullTypeNameInSchemaIds”以获取潜在的解决方法
完整消息:
500 : {"Message":"发生错误。","ExceptionMessage":"schemaIds 冲突:检测到类型 A 和 B 的 schemaId 重复。请参阅配置设置 - \"UseFullTypeNameInSchemaIds\" 了解潜在的解决方法","ExceptionType ":"System.InvalidOperationException","StackTrace":" 在 Swashbuckle.Swagger.SchemaRegistry.CreateRefSchema(类型类型)\r\n 在 Swashbuckle.Swagger.SchemaRegistry.CreateInlineSchema(类型类型)\r\n 在 Swashbuckle.Swagger。 SchemaRegistry.b__1f(JsonProperty prop)\r\n 位于 System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func
2键选择器、功能2 elementSelector, IEqualityComparer
1 个比较器)\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 at Swashbuckle.Swagger.SwaggerGenerator.<>c__DisplayClass7.<GetSwagger>b__4(IGrouping
2 组)\r\n 在 System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func
2键选择器、功能2 elementSelector, IEqualityComparer
1 个比较器)\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 请求,CancellationToken CancellationToken)\r\n 在 System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage 请求,CancellationToken CancellationToken)\r\n 在 System.Net.Http.DelegatingHandler.SendAsync( HttpRequestMessage 请求,CancellationToken CancellationToken)\r\n at System.Web.Http.HttpServer.d__0.MoveNext()"}http://localhost:24215/swagger/docs/v1 http://localhost:24215/swagger/docs/v1
我不想更改班级名称。我该如何修复它?
swagger JSON 中的每个类都必须有一个唯一的 schemaId。
Swashbuckler 尝试仅使用类名作为简单的 schemaId,但是如果您在不同的命名空间中有两个具有相同名称的类(如您所做的那样),则这将不起作用。
正如错误所示,您可以使用配置设置“UseFullTypeNameInSchemaIds*”作为潜在的解决方法(更新:在最新版本中不可用)
在较新的版本中,您可以通过选项实现相同的行为。自定义SchemaId(x => x.FullName)。
这是一个例子:
services.ConfigureSwaggerGen(options =>
{
//your custom configuration goes here
...
// UseFullTypeNameInSchemaIds replacement for .NET Core
options.CustomSchemaIds(x => x.FullName);
});
了解更多信息http://wegotcode.com/microsoft/swagger-fix-for-dotnetcore/ http://wegotcode.com/microsoft/swagger-fix-for-dotnetcore/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)