Mic*_*ich 13 ruby api ruby-on-rails rails-api ruby-on-rails-4
我实际上正在使用一个使用Rails 4的API.Content-Type如果客户端没有在Content-Type头文件中指定媒体类型,我想将请求设置为JSON .
为了获得该行为,我尝试before_action在我的添加中添加以下内容ApplicationController:
def set_request_default_content_type
request.format = :json
end
Run Code Online (Sandbox Code Playgroud)
在我的RegistrationsController#create方法中,我有一个断点来检查一切是否正常.好吧,request.format诀窍不起作用,尽管设置的值application/json似乎控制器(或Rails内部)不会将接收到的请求的Content-Type视为JSON.
我使用以下正文进行了POST请求(并且没有Content-Type):
{"user" : {"email":"foobar@mail.net","password":"foobarfoo"}}
Run Code Online (Sandbox Code Playgroud)
通过Pry调试我看到:
[2] api(#<V1::RegistrationsController>) _ request.format.to_s
=> "application/json"
[3] api(#<V1::RegistrationsController>) _ params
=> {
"action" => "create",
"controller" => "v1/registrations"
}
Run Code Online (Sandbox Code Playgroud)
这意味着Rails没有使用配置的request.format考虑我的请求Mime::JSON,而是使用Mime::ALL,因此它没有解析请求的JSON主体.:(
hou*_*se9 -1
您应该能够使用路由设置默认格式:http://guides.rubyonrails.org/routing.html#defining-defaults
\nresources :registrations, ... defaults: { format: \'json\' }\nRun Code Online (Sandbox Code Playgroud)\n另请参阅:如何在 Rails 中设置路由的默认格式?\nrails 中的路线格式?answertab=active#tab-top
\n也许还感兴趣:
\n\n\n当包含 \xe2\x80\x9c,/\xe2\x80\x9d 或 \xe2\x80\x9c/,\xe2\x80\x9d 时,Rails 会忽略接受头并返回 HTML(如果是 \xe2\x80\ 则返回 JS) x99s 是 xhr 请求)。
\n这是设计使然,从浏览器访问时始终返回 HTML。
\n这并不遵循 mime 类型协商规范,但它是规避带有错误接受标头的旧浏览器的唯一方法。他们让他接受第一个 mime 类型为 image/png 或 text/xml 的标头。
\n
| 归档时间: |
|
| 查看次数: |
6474 次 |
| 最近记录: |