swagger Fehler: Widersprüchliche schemaIds: Doppelte schemaIds erkannt, für die Typen A und B
Verwendung von Web-API und mit swashbuckle zu generieren swagger Dokumentation,
Ich definiert zwei verschiedene Klassen mit dem gleichen Namen in zwei verschiedenen namespaces. wenn ich öffnen Sie stolzieren Seite in meinem browser sagt es
Widersprüchliche schemaIds: Doppelte schemaIds erkannt, für die Typen A und B. Finden Sie in der config-Einstellung - "UseFullTypeNameInSchemaIds" für eine mögliche Problemumgehung
vollständige Meldung:
500 : {"Message":"Ein Fehler ist aufgetreten.","ExceptionMessage":"Konflikt schemaIds: Doppelte schemaIds erkannt, für die Typen A und B. Finden Sie in der config-Einstellung - \"UseFullTypeNameInSchemaIds\" für eine mögliche Problemumgehung","ExceptionType":" - System.InvalidOperationException","StackTrace":" bei Swashbuckle.Stolzieren.SchemaRegistry.CreateRefSchema(Typ)\\r \ \ n bei Swashbuckle.Stolzieren.SchemaRegistry.CreateInlineSchema(Typ)\\r \ \ n bei Swashbuckle.Stolzieren.SchemaRegistry.b__1f(JsonProperty prop)\\r \ \ n bei System.Linq -.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable
1 source, Func
2 keySelector, Func2 elementSelector, IEqualityComparer
1 comparer)\\r \ \ n bei Swashbuckle.Stolzieren.SchemaRegistry.CreateObjectSchema(JsonObjectContract jsonContract)\\r \ \ n bei Swashbuckle.Stolzieren.SchemaRegistry.CreateDefinitionSchema(Typ)\\r \ \ n bei Swashbuckle.Stolzieren.SchemaRegistry.GetOrRegister(Typ)\\r \ \ n bei Swashbuckle.Stolzieren.SwaggerGenerator.CreateOperation(ApiDescription apiDesc, SchemaRegistry schemaRegistry)\\r \ \ n bei Swashbuckle.Stolzieren.SwaggerGenerator.CreatePathItem(IEnumerable1 apiDescriptions, SchemaRegistry schemaRegistry)\r\n at Swashbuckle.Swagger.SwaggerGenerator.<>c__DisplayClass7.<GetSwagger>b__4(IGrouping
2-Gruppe)\\r \ \ n bei System.Linq -.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func
2 keySelector, Func2 elementSelector, IEqualityComparer
1 comparer)\\r \ \ n bei Swashbuckle.Stolzieren.SwaggerGenerator.GetSwagger(String rootUrl, String apiVersion)\\r \ \ n bei Swashbuckle.- Anwendung.SwaggerDocsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.HttpServer.d__0.MoveNext()"} http://localhost:24215/swagger/docs/v1
Will ich nicht ändern, meine Klassen-Namen. Wie kann ich es beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jede Klasse in Fors JSON muss einen eindeutigen Schema-id.
Mantel-und-Degen versucht, verwenden Sie einfach den Namen der Klasse als eine einfache Schema-id, aber wenn Sie haben zwei Klassen in einem anderen Namensraum mit demselben Namen (wie Sie tun), wird dies nicht funktionieren.
Wie die Fehlermeldung schon sagt, kann man die config-Einstellung "UseFullTypeNameInSchemaIds" für eine mögliche Problemumgehung.
wenn Ihr Anliegen ist, Wie "UseFullTypeNameInSchemaIds" in .NetCore middleware? können Sie erzielen das gleiche Verhalten über die Optionen.CustomSchemaIds(x => x.FullName).
Hier ist ein Beispiel:
weitere Informationen http://wegotcode.com/microsoft/swagger-fix-for-dotnetcore/
Ich endlich einen Weg gefunden, in Fors configs. Gehen Sie zu
App_Start\SwaggerConfig.cs
- Datei und unterEnableSwagger
lambda-Ausdruck fügen Sie diese Zeile:Vollständige code ist wie folgt:
Ich bin mit Asp.net Core 2.1. Dieser Fehler führte, wenn ich zu zeigen versucht Swagger-UI.
Löste ich das problem auf diese Weise:
In
Starup.cs
imConfigureServices()
hinzufügenc.CustomSchemaIds(i => i.FullName);
siehe Beispiel unten:
Wenn du auskommentieren oder hinzufügen:
In diesem Abschnitt, es zu tun scheint, die gleiche Sache.
Wenn Ihr Modell enthält generische Typen, erwägen Sie die Verwendung
Type.ToString()
stattType.FullName
um loszuwerden, Montage erzeugten Informationen für die generischen parameter den Typ und machen Sie Ihre schema-ids mehr konsistent.Beispiel zeigt den Unterschied auf
List<string>
: