Swagger con Service Stack non funziona

Sto cercando di implementare Swagger con Service Stack. Ho installato lo stack di servizio con swagger usando nuget. Le attuali versioni DLL sono riportate per lo più come 3.9.56.0.

Sto cercando di seguire l’esempio fornito in … https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/SwaggerHelloWorld

e l’istruzione sembra abbastanza infallibile …

Plugins.Add(new ServiceStack.Api.Swagger.SwaggerFeature()); 

entra nel metodo “Configura” dopo che ho installato via nuget (come indicato dalla documentazione), poi ho aggiunto i tag [ApiMember] e [Api], insieme alle modifiche ai tag [Route] per aggiungere Riepilogo e Note

ma quando visito ~/swagger-ui/index.html ottengo l’errore

 Please specify the protocol for ../api 

La mia API si trova in ~/api , e al momento ho un singolo metodo (Hello World) seduto in ~api/Hello/{name} che restituisce JSON e funziona correttamente.

se visito ~api ottengo il messaggio Handler for Request not found: con un output di tipo stack trace.

Che cosa sto facendo di sbagliato? Le istruzioni per abilitare lo swagger appaiono davvero semplici e mancano le istruzioni dettagliate, probabilmente perché dovrebbe “funzionare”, per favore aiutatemi!

Aggiornamento per indirizzare Esker …

Stack trace @ myhost: 54011 / api

 Handler for Request not found: Request.ApplicationPath: / Request.CurrentExecutionFilePath: /api Request.FilePath: /api Request.HttpMethod: GET Request.MapPath('~'): D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\ Request.Path: /api Request.PathInfo: Request.ResolvedPathInfo: /api Request.PhysicalPath: D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\api Request.PhysicalApplicationPath: D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\ Request.QueryString: Request.RawUrl: /api Request.Url.AbsoluteUri: http://localhost:54011/api Request.Url.AbsolutePath: /api Request.Url.Fragment: Request.Url.Host: localhost Request.Url.LocalPath: /api Request.Url.Port: 54011 Request.Url.Query: Request.Url.Scheme: http Request.Url.Segments: System.String[] App.IsIntegratedPipeline: True App.WebHostPhysicalPath: D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger App.WebHostRootFileNames: [global.asax,global.asax.cs,helloservice.cs,jquery-1.10.2.js,packages.config,servicestackswagger.csproj,servicestackswagger.csproj.user,web.config,web.debug.config,web.release.config,app_data,app_start,bin,controllers,dto,models,obj,properties,swagger-ui,views] App.DefaultHandler: metadata App.DebugLastHandlerArgs: GET|/api|D:\Starteam\Private\user\web\ServiceStackSwagger\ServiceStackSwagger\api 

Inoltre, “Si prega di specificare il protocollo” è un errore di spavalderia, visualizzato sullo schermo in html al di sotto della “casella di testo per cambiare l’URL di ricerca” sopra citato

e le versioni DLL sono “per lo più” le stesse perché ServiceStack.Redis è la versione 3.9.57.0, ma non lo sto usando, quindi “principalmente”

Aggiorna … La mia soluzione

Ne avevo bisogno nel mio file web.config all’interno del tag , in precedenza non avevo incluso il bit .

                 

inoltre … avevo impostato i miei “percorsi” come tali …

 //INCORRECT [Route("/api/Hello/{name}", Summary = @"N031'5 ServiceStackSwagger thingy", Notes = "Some more info in here cause these are notes")] public class Hello : IReturn 

ma quello ha incasinato la funzionalità di spavalderia, doveva essere …

 //CORRECT [Route("/Hello/{name}"... 

con la punta ‘api’ RIMOSSA, e ora tutto funziona.

È necessario comunicare a Swagger l’URL specifico dell’endpoint di ServiceStack Swagger, anziché l’URL di base dei servizi. Questo endpoint si trova in /resources sotto l’URL di base. Quindi, invece di ../api per discoveryUrl , usa ../api/resources , nel modo seguente, nel tuo file index.html:

 window.swaggerUi = new SwaggerUi({ discoveryUrl: '../api/resources', ...