2016-04-04 10 views
1

Ich habe swagger mit swashbuckle 5.x und swashbuckle-Odata in mein Web-API/OData-Projekt integriert. Wenn ich zu http://root_url/swagger navigiere, kann ich alle verfügbaren API-Dokumentation in einer großen Liste sehen. Jedes Ding funktioniert völlig in Ordnung, aber ich habe eine Liste der Odata Controller und API (s), die ich benötigt, um in einer separaten Liste zeigen. Ich weiß, das ist etwas, was ich tun muss, um eine benutzerdefinierte index.html für Prahlerei erstellen und injizieren in swaggerconfig.cs wieAnpassen von swagger ui zur separaten Dokumentation

c.CustomAsset("index", thisAssembly, "SwaggerUI_Config.SwaggerExtensions.index.html"); 

Ich habe im Internet recherchiert, wie ich Prahlerei Dokumentation trennen kann, so dass ich kann erstelle eine andere HTML-Liste und erziele mein Ergebnis, bisher kein Glück. Hat jemand etwas Ähnliches gemacht? Können Sie mir bitte ein paar Vorschläge oder Hinweise geben, wo ich anfangen muss?

Ich versuche, folgende Struktur auf meiner Swagger-Dokumentation zu erreichen.

+ Custom API list 
    +API Controller #1 
    > GET API 
    > POST API 
    > PUT API 
    > DELETE API 
    +API Controller #2 
    > GET API 
    > POST API 
    > PUT API 
    > DELETE API 

+ All available API(s) 
    +API Controller #1 
    > GET API 
    > POST API 
    > PUT API 
    > DELETE API 
    +API Controller #2 
    > GET API 
    > POST API 
    > PUT API 
    > DELETE API 
    +API Controller #3 
    > GET API 
    > POST API 
    > PUT API 
    > DELETE API 

Antwort

0

Sie können @Api Annotation mit Tags Attribut von Swagger verwendet werden. Es wird Ihre APIs auf Swagger UI Dashboard so organisieren, wie Sie möchten. Zum Beispiel

@Path("apiController1") 
@Api(value = "/apiController1", tags = "API CONTROLLER 1") 
@Produces({ 
     MediaType.APPLICATION_JSON 
}) 
public class APIController1 { 

    @GET 
    @Path("fooGet") 
    public final String fooGet() { 
     return "Hello, World"; 
    } 
} 

In einem anderen Controller.

@Path("apiController2") 
@Api(value = "/apiController2", tags = { 
     "API CONTROLLER 2", "DEFAULT" 
}) 
@Produces({ 
     MediaType.APPLICATION_JSON 
}) 
public class APIController2 { 

    @GET 
    @Path("fooGet2") 
    public final String fooGet2() { 
     return "Hello, World"; 
    } 
} 

und das Swagger UI Dashboard wird so aussehen. enter image description here

+0

Danke für Ihren Kommentar, das ist Java? Ich konnte keine @Api Annotation für Swashbuckle-Swagger finden. Ich suche nach der ähnlichen Funktionalität in ASP.Net Web API-Anwendung. –

+0

Ja. Das ist für Java. Allerdings zeigt ein schneller Google, dass Swagger Core für Swashbuckle solche Funktionalität freilegt. https://github.com/domaindrivendev/Swashbuckle/blob/master/Swashbuckle.Core/Swagger/Annotations/SwaggerOperationAttribute.cs –

+0

Hier ist eine Beispielverwendung davon aus einem Blog. http://blog.greatrexpectations.com/2015/03/18/custom-operation-names-with-swashbuckle-5-0/ –

1

ich Ihre Anforderungen haben verkannt können, aber Sie sollten in SwaggerConfig.cs gruppieren Ihre Aktionen mit der GroupActionsBy Methode in Ihrem EnableSwagger Aufruf der Lage sein:

c.GroupActionsBy(apiDesc => 
{ 
    string controllerName = apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName; 
    string method = apiDesc.ActionDescriptor.SupportedHttpMethods.First().Method; 

    return string.Format("{0} {1} API", controllerName, method); 
} 
Verwandte Themen