我正在嘗試將一個Grape API以json格式應答到它的所有動詞。問題是,我無法讓它回答json格式的路由錯誤。我什至不能拯救ActionController :: RoutingError。Rails 4 Grape API ActionController :: RoutingError
我已閱讀此鏈接https://github.com/intridea/grape/pull/342,我已將cascade指令設置爲false,但API僅以純文本回答「未找到」。
$ curl -X GET http://localhost:3000/api/wrong_uri
Not Found
有詳細選項:
$ curl -X GET http://localhost:3000/api/wrong_uri -v
* About to connect() to localhost port 3000 (#0)
* Trying 127.0.0.1... connected
> GET /api/wrong_uri HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost:3000
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/html
< Cache-Control: no-cache
< X-Request-Id: 3cc74a78-3295-4c1f-b989-66d6fac50e5c
< X-Runtime: 0.002980
< Server: WEBrick/1.3.1 (Ruby/2.1.1/2014-02-24)
< Date: Tue, 06 May 2014 05:46:33 GMT
< Content-Length: 9
< Connection: Keep-Alive
<
* Connection #0 to host localhost left intact
* Closing connection #0
Not Found
我的葡萄文件/app/api/api.rb
module API
class Base < Grape::API
format :json
default_error_formatter :json
cascade false
rescue_from CanCan::AccessDenied do |e|
Rack::Response.new({ error: "Forbidden", detail: "Access denied", status: '403' }.to_json, 403).finish
end
# it doesn't catch ActionController::RoutingError
# rescue_from :all do |e|
# error_response({ message: "rescued from #{e.class.name}" })
# end
helpers ApiHelpers
mount API::Auth
mount API::V2
mount API::V1
end
end