尽管工作的API,ui只发送OPTIONS而不POST POST http方法

我使用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"

我只是抛出所有建议。 我已启用supportedSubmitMethods中的所有HTTP方法,并且使用POSTMAN Chrome扩展程序测试了API,并且它可以很好地工作。 正确创建用户并返回正确的数据。

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

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

和看起来像这样的大举反应:

请求URL

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

响应体

响应代码

0

响应头

我也用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

我有同样的问题,只是解决它,希望这可以帮助别人。

Swagger-UI只通过一个'form'paramType接受多个参数,而不是'body'paramType,在这个问题中引用https://github.com/wordnik/swagger-ui/issues/72。

我使用了分支:git =>'git://github.com/Digication/grape-swagger.git'将'post'request paramType改为'form'。 为swagger_doc生成的xml输出(可能在path / swagger_doc / api或类似处)应该如下所示:

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

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

我用葡萄大摇滚的宝石来自动在本地主机上安装swagger-ui(文件也可以从swagger-ui网站下载),并且一切正常!


有同样的问题。 通过添加CORS修复

添加到Gemfile中:

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

添加到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

请确保您在此处更改了API的位置。


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

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

我正在使用rails进程(使用awesome 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

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

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

希望这可以帮助。

链接地址: http://www.djcxy.com/p/67769.html

上一篇: ui only sending OPTIONS not POST http method despite working API

下一篇: Click to get index of array element with jquery