web-dev-qa-db-de.com

Fehler in der Web-API-Swagger-Dokumentation 500

Wenn ich auf die Swagger-URL: http://localhost:28483/swagger/ui/index zugreifen, wird dieser Fehler generiert:

500 : undefined http://localhost:28483/swagger/docs/v1

Irgendwelche Ideen?

UPDATED: Siehe Detailfehler in Firebug: 

Not supported by Swagger 2.0: Multiple operations
 with path 'api/BimModel' and method 'GET'. See the config setting - \"ResolveConflictingActions\" for
 a potential workaround
9
Minh Nguyen

Swagger betrachtet möglicherweise zwei Aktionen als eine Operation (wie in diesem üblichen Szenario) ...

GET api/Products
GET api/Products/{id}

Es scheint, dass Sie attribute routing verwenden können, um dies zu beheben und diese Attribute über Ihren Aktionen zu verwenden, damit swagger sie separat erkennt.

[Route("api/Products")]

[Route("api/Products/{id:guid}")]
10
Evan

Haben Sie versucht, dies in Ihrer Swagger-Konfiguration zu aktivieren?

c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
3
Adi Widodo

Im Controller wurden zwei verschiedene GET-Operationen ausgeführt, die von Swagger nicht zugelassen werden. Ich schlage vor, entweder nur eine einzelne GET-Operation für jeden Controller auszuführen oder den Router in WebApiConfig zu ändern

1
Minh Nguyen

Ich hatte das gleiche Problem beim Mischen von Attributrouting mit Standardrouten. Wenn ich die Standardroute entfernte, ging das Problem weg. Der Nachteil ist, ohne die definierte Standardroute musste ich allen meinen Controllern Attributrouting hinzufügen.

Also habe ich aus meiner WebApiConfig entfernt:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

Und fügte Attributrouting zu meinem Controller hinzu:

[Route("Session")] // Added this attribute
public async Task<IHttpActionResult> Get()
...    
[Route("Session/{id}")] // Added this attribute
public async Task<IHttpActionResult> Get(int id)

In Wirklichkeit verwende ich eine [RoutePrefix("Session")] auf meinem Controller und verwende [Route("")] für meine Methoden, aber das Ergebnis sollte das gleiche sein.

0
Fredrik Ljung

Dieser Fehler wurde angezeigt, da die Parameternamen nicht zwischen der Attribut-Routing-Anweisung und der Methodensignatur übereinstimmen.

[HttpGet("{id}")]
public IActionResult Get(string deviceNumber){
...

Nach dem Ändern von "{id}" in "{Gerätenummer}" wurde der Fehler behoben.

0
Wes