尽管工作API,但Swagger-ui仅发送OPTIONS而不是POST http方法

Ric*_*dan 7 api post ruby-on-rails swagger grape-api

我正在使用Swagger-UI浏览我自己的API,用葡萄构建并自动记录葡萄招摇.

我用Google搜索并尝试了我能找到的所有建议,但我无法让POST工作.这是我的标题:

  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"
Run Code Online (Sandbox Code Playgroud)

我只是扔了一切建议.我已经在supportedSubmitMethods中启用了所有HTTP方法,并且我使用POSTMAN Chrome扩展程序测试了API,它运行良好.正确创建用户并返回正确的数据.

然而,我得到的所有内容都是服务器报告:

Started OPTIONS "/v1/users.json" for 127.0.0.1 at 2012-12-21 04:07:13 -0800
Run Code Online (Sandbox Code Playgroud)

和swagger的反应看起来像这样:

请求网址

http://api.lvh.me:3000/v1/users.json
Run Code Online (Sandbox Code Playgroud)

响应机构

响应代码

0
Run Code Online (Sandbox Code Playgroud)

响应标题

我还用POSTMAN测试了OPTIONS响应,它位于:

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
Run Code Online (Sandbox Code Playgroud)

nat*_*vda 0

很高兴听到你正在使用葡萄大摇大摆:我认为它很棒:)

我不完全确定您遇到同样的问题,但是当从浏览器进行本地测试时,它会尝试检查来源是否与请求的相同,因此为了确保我不会收到该错误,我创建了一个小型中间件将告诉浏览器我们允许所有来源。

我正在使用 Rails 进程(使用很棒的 Rails-api gem 创建),因此我创建了一个包含lib/middleware/access_control_allow_all_origin.rb以下内容的新文件:

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
Run Code Online (Sandbox Code Playgroud)

在我的底部,application.rb我只需添加中间件,如下所示:

require 'middleware/access_control_allow_all_origin'
config.middleware.insert_after Rack::ETag, Middleware::AccessControlAllowAllOrigin
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。