2013-08-09 38 views
5

Tôi đang cố triển khai Swagger với Ngăn xếp dịch vụ. Tôi đã cài đặt dịch vụ ngăn xếp với swagger sử dụng nuget. Các phiên bản DLL hiện tại được báo cáo là 3.9.56.0 chủ yếu.Chuyển đổi với ngăn xếp dịch vụ không hoạt động

Tôi cố gắng để làm theo tấm gương được cung cấp tại ... https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/SwaggerHelloWorld

và instrucstion xuất hiện khá fool-proof ...

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

đi vào 'Cấu hình' phương pháp sau tôi đã cài đặt qua nuget (như tài liệu hướng dẫn), sau đó tôi đã thêm thẻ [ApiMember] và [Api], cùng với các thay đổi cho thẻ [Route] để thêm Summary và Notes

nhưng khi tôi truy cập ~/swagger-ui/index.html tôi nhận được người erro r

Please specify the protocol for ../api 

api của tôi nằm ở ~/api, và tôi có một phương pháp duy nhất tại thời điểm (Hello World) ngồi ở ~api/Hello/{name} trả về JSON và hoạt động ok.

nếu tôi truy cập ~api tôi nhận được thông báo Handler for Request not found: với đầu ra loại theo dõi ngăn xếp.

Tôi đang làm gì sai? Các hướng dẫn để cho phép vênh vang xuất hiện thực sự thẳng về phía trước, và hướng dẫn chi tiết dường như thiếu, có lẽ bởi vì nó nên 'chỉ làm việc', xin vui lòng giúp đỡ!

Update để giải quyết Esker ...

Stack trace @ myhost: 54.011/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 

Ngoài ra, "Hãy xác định giao thức 'là một lỗi vênh vang, hiển thị trên màn hình trong html bên dưới nói trên' hộp văn bản để thay đổi url khám phá '

và các phiên bản DLL là' chủ yếu 'giống nhau bởi vì ServiceStack.Redis là phiên bản 3.9.57.0, nhưng tôi không sử dụng, vì vậy' chủ yếu '

Cập nhật ... Giải pháp của tôi

Tôi cần tệp này trong tệp web.config bên trong thẻ <configuration>, trước đây tôi chưa bao gồm 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> 

cũng ... Tôi đã thiết lập 'đường' của tôi như vậy ...

//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> 

nhưng điều đó sai lầm với chức năng vênh vang, nó cần thiết để được ...

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

với bit 'api' ĐÃ XÓA, và bây giờ mọi thứ đang hoạt động.

+0

Giá trị bạn đã đặt cho 'discoveryUrl' trong tập lệnh khởi tạo' window.swaggerUi = new SwaggerUi .... 'trong tệp index.html của bạn là gì? –

+0

Tôi đang sử dụng '../ api', nhưng tôi cũng có một hộp văn bản trên màn hình để thay đổi giá trị đó và thực hiện một lần thử khác. @esker – Nnoel

+0

Bạn có thể hiển thị theo dõi ngăn xếp cho lỗi "Trình xử lý yêu cầu không tìm thấy" không? Ngoài ra, "Hãy chỉ định giao thức" - lỗi xuất hiện chính xác như thế nào, bất kỳ ý tưởng nào về lỗi đó đến từ đâu? Có vẻ như đó là lỗi Javascript, v.v. –

Trả lời

2

Bạn cần nói với Swagger về URL cụ thể của điểm cuối Dịch vụ Swagger Swagger, thay vì URL cơ sở của các dịch vụ của bạn. Điểm cuối này nằm ở số /resources dưới URL cơ sở của bạn. Vì vậy, thay vì ../api cho số discoveryUrl, hãy sử dụng ../api/resources, như vậy, trong chỉ mục của bạn.tệp html:

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

Không, điều đó đã không hữu ích. "Vui lòng chỉ định giao thức cho ../api/resources" hiện là thư. – Nnoel

+0

Tôi đã cập nhật câu hỏi của mình ở trên, vui lòng xem – Nnoel

Các vấn đề liên quan