2012-12-21 31 views
7

Tôi đang sử dụng Swagger-UI để duyệt API của riêng tôi, được tạo bằng nho và tự động được ghi lại bằng vung nho.Swagger-ui chỉ gửi OPTIONS chứ không phải phương thức POST http mặc dù API làm việc

Tôi đã googled và thử mọi đề xuất tôi có thể tìm thấy, nhưng tôi không thể POST được để làm việc. Dưới đây là các tiêu đề của tôi:

header "Access-Control-Allow-Origin", "*" 
    header "Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE" 
    header "Access-Control-Request-Method", "*" 
    header "Access-Control-Max-Age", "1728000" 
    header "Access-Control-Allow-Headers", "api_key, Content-Type" 

Tôi vừa ném vào mọi thứ được đề xuất. Tôi đã kích hoạt tất cả các phương thức HTTP trong supportSubmitMethods và tôi đã thử nghiệm API bằng cách sử dụng phần mở rộng POSTMAN Chrome và nó hoạt động hoàn hảo. Tạo người dùng đúng cách và trả về dữ liệu chính xác.

Tuy nhiên tất cả tôi nhận được với bài vênh vang là báo cáo server:

Started OPTIONS "/v1/users.json" for 127.0.0.1 at 2012-12-21 04:07:13 -0800 

và phản ứng vênh vang tìm kiếm như thế này:

Request URL

http://api.lvh.me:3000/v1/users.json 

đáp ứng Body

đáp ứng Mã số

0 

Tiêu đề phản hồi

Tôi cũng đã thử nghiệm phản ứng với Postman OPTIONS và nó là dưới đây:

Allow →OPTIONS, GET, POST 
Cache-Control →no-cache 
Date →Fri, 21 Dec 2012 12:14:27 GMT 
Server →Apache-Coyote/1.1 
X-Request-Id →9215cba8da86824b97c6900fb6d97aec 
X-Runtime →0.170000 
X-UA-Compatible →IE=Edge 
+0

bạn đã giải quyết nó chưa? Tôi đang mắc kẹt với cùng một vấn đề. –

+0

phải trung thực tôi không thể nhớ nếu tôi giải quyết nó hoặc đặt nó trên kệ - tôi sẽ có một cái nhìn khác ngày hôm nay và báo cáo lại Neha –

+0

nó làm việc. Tôi đã cung cấp cho nó một tên miền và đã thay đổi basePath thành tên miền. –

Trả lời

0

Rất vui được nghe bạn đang sử dụng nho vênh vang: Tôi nghĩ rằng đó là tuyệt vời :)

Tôi không hoàn toàn chắc chắn rằng bạn đang gặp phải vấn đề tương tự, nhưng khi thử nghiệm cục bộ từ trình duyệt, nó sẽ cố gắng kiểm tra xem nguồn gốc có giống như yêu cầu hay không, vì vậy để đảm bảo tôi không gặp lỗi đó, tôi đã tạo middleware nhỏ sẽ tel l trình duyệt chúng tôi cho phép tất cả nguồn gốc.

Tôi đang sử dụng một quá trình lan can (tạo ra với tuyệt vời ngọc ray-api), vì vậy tôi có thể tạo một file mới trong lib/middleware/access_control_allow_all_origin.rb với nội dung sau:

module Middleware 
    class AccessControlAllowAllOrigin 

    def initialize(app) 
     @app = app 
    end 

    def call(env) 
     status, headers, body = @app.call(env) 
     allow_all_origin!(headers) 
     [status, headers, body] 
    end 

    private 

    def allow_all_origin!(headers) 
     headers['Access-Control-Allow-Origin'] = '*' 
     headers['Access-Control-Request-Method'] = '*' 
    end 

    end 
end 

và ở dưới cùng của tôi application.rb Tôi chỉ thêm phần mềm trung gian như sau:

require 'middleware/access_control_allow_all_origin' 
config.middleware.insert_after Rack::ETag, Middleware::AccessControlAllowAllOrigin 

Hy vọng điều này sẽ hữu ích.

+0

Nó không phải là vấn đề CORS mà tôi nhận được - mặc dù đó là một vấn đề trước đó mà tôi đã có với điều này. Tôi đặt cái này lên bếp sau để tập trung vào các phần khác của vấn đề, vì vậy tôi sẽ xem xét lại cái này trong tuần này. –

0

Tôi không biết về giải pháp cho ruby-on-rails vì tôi đang sử dụng Swagger với play framework 2.0.2. Tôi đã cung cấp một tên miền cho nó và thay đổi basePath thành tên miền trong tệp application.conf là swagger.api.basepath="domain-name" và nó hoạt động. Bạn có thể thay đổi basePath trong api-docs thành domain-name. Tôi đã đọc về số api-docs trên api-docs.

+0

oh - đó là thú vị - okay cho phép tôi kiểm tra này ra sau đó với thực hiện Rails của tôi trong vòng 24 giờ tới - nếu công trình tôi sẽ bấm vào dấu kiểm và upvote :-) –

0

Và máy chủ web của bạn có bị xâm nhập tiêu đề không? Ví dụ: nếu bạn đang sử dụng NGinx, yêu cầu "TÙY CHỌN" của bạn có thể không gửi các giá trị thích hợp làm phản hồi, trong một số trường hợp.

Phản hồi yêu cầu OPTIONS của bạn là gì? Bạn có thể đổ nó ra ở đây? Tôi sẽ cho bạn biết nếu nó có thể được điều đó.

+0

Đây là một câu hỏi hay. Tôi đã không bỏ qua nó. Chỉ cần có cơ hội để kiểm tra như tôi đã không xem xét điều này trong một toàn thể. Các thử nghiệm chỉ là máy chủ địa phương và tôi không thể nhớ lại máy chủ tôi đã sử dụng cho rằng - kiểm tra bệnh và cập nhật này. –

2

Tôi đã có cùng một vấn đề và chỉ giải quyết nó, hy vọng điều này sẽ giúp ai đó.

Swagger-UI chấp nhận nhiều thông số thông qua POST chỉ thông qua paramType 'form', không phải là paramType 'body', được tham chiếu trong số này https://github.com/wordnik/swagger-ui/issues/72.

Tôi đã sử dụng chi nhánh: git => 'git: //github.com/Digication/grape-swagger.git' changing 'post' request paramType thành 'form'. đầu ra xml tạo ra cho swagger_doc (có thể là tại đường dẫn/swagger_doc/api hoặc tương tự) nên tìm một cái gì đó như thế này:

<api> 
    <path>/api/v2/...</path> 
    <operations type="array"> 
     ... 
     <httpMethod>POST</httpMethod> 
     <parameters type="array"> 
      <parameter> 
      <paramType>form</paramType> 
      ...More 

Không

<paramType>body</paramType> 
...More 

tôi đã sử dụng nho vênh vang-ray đá quý để tự động cài đặt vênh vang -ui trên localhost (các tập tin cũng có thể được tải xuống từ trang sw sw sw sw sw sw))), và mọi thứ đều hoạt động !!

2

Có cùng sự cố. Cố định bằng cách thêm CORS

thêm vào Gemfile:

gem 'rack-cors', :require => 'rack/cors' 

thêm vào application.rb

config.middleware.use Rack::Cors do 
    allow do 
     origins '*' 
     # location of your API 
     resource '/*', :headers => :any, :methods => [:get, :post, :options, :put] 
    end 
end 

hãy chắc chắn rằng bạn đã thay đổi vị trí của API của bạn ở đây.