尽管工作的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