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.Swagger con Service Stack non funzionante
Sto cercando di seguire l'esempio fornito a ... https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/SwaggerHelloWorld
e l'instrucstion appaiono abbastanza infallibile ...
Plugins.Add(new ServiceStack.Api.Swagger.SwaggerFeature());
va in 'Configura' metodo dopo che ho' Ho installato via nuget (come indicato dalla documentazione), quindi ho aggiunto i tag [ApiMember] e [Api], insieme alle modifiche ai tag [Route] per aggiungere Riassunto e Note
ma quando visito lo ~/swagger-ui/index.html
ottengo l'erro r
Please specify the protocol for ../api
mio api si siede a ~/api
, e ho un unico metodo in questo momento (Ciao Mondo), seduto al ~api/Hello/{name}
che restituisce JSON e funziona bene.
se si visita ~api
viene visualizzato il messaggio Handler for Request not found:
con un output di tipo di traccia stack.
Cosa sto sbagliando? Le istruzioni per abilitare lo swagger appaiono davvero semplici e mancano le istruzioni dettagliate, probabilmente perché dovrebbe "funzionare", per favore aiutatemi!
aggiornamento per risolvere 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 sotto il già citato' textbox per cambiare la scoperta url'
e le versioni DLL sono 'per lo piu' lo stesso perché ServiceStack.Redis è la versione 3.9.57.0, ma io non sto usando che, cosi 'per lo piu'
Aggiornamento ... La mia soluzione
Avevo bisogno di questo nel mio file web.config all'interno del tag <configuration>
, in precedenza non avevo incluso il bit <location path="api">
.
<!-- ServiceStack: CustomPath /api -->
<location path="api">
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
</httpHandlers>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
</location>
anche ... avevo messo i miei 'percorsi' in quanto tale ...
//INCORRECT
[Route("/api/Hello/{name}", Summary = @"N031'5 ServiceStackSwagger thingy", Notes = "Some more info in here cause these are notes")]
public class Hello : IReturn<HelloResponse>
ma che pasticciato con la funzionalità di spavalderia, aveva bisogno di essere ...
//CORRECT
[Route("/Hello/{name}"...
con il bit "api" RIMOSSO, e ora tutto funziona.
Qual è il valore che avete impostato per 'discoveryUrl' nel window.swaggerUi = new SwaggerUi ....' script 'di inizializzazione nel file index.html? –
Sto usando '../ api', ma ho anche una casella di testo sullo schermo per cambiare quel valore e fare un altro tentativo. @esker – Nnoel
Puoi mostrare la traccia dello stack per quell'errore "Handler for Request not found"? Inoltre, che "Si prega di specificare il protocollo" - come appare esattamente quell'errore, qualche idea su da dove viene questo errore? Sembra che si tratti di un errore Javascript, ecc. –