我只是想知道rails如何知道请求的格式才能正确输入名称:
respond_to do |format|
format.html
format.xml
format.json
end
作为一个例子,考虑一下我面临的这种情况。假设通过javascript(使用jQuery)我发出一个POST请求,明确 dataType:json
$.ajax({
type: 'POST',
url: 'example.com',
data: data,
dataType: 'json'
});
当此请求到达控制器操作时,使用ruby调试器站在其中,我检查@ request.format,我可以看到content-type是application / json。然后控制器按预期响应json格式。
但我对路线中指定的格式符号感到困惑。假设向 example.com/parts.json 发出请求,但在请求中,内容类型为application / html或application / xml。 控制器是否响应json格式或html或xml ??
谢谢!
答案 0 :(得分:7)
来自ActionController::MimeResponds:“Rails根据客户端提交的HTTP Accept标头确定所需的响应格式。”
答案 1 :(得分:0)
传入的 Content-Type
仅影响解析请求的方式。它不影响响应格式。
Since Rails 5.0,响应格式通过检查:
format
参数(例如 /url?format=xml
)Accept
标头(例如 Accept: application/json
)/url.html
)您可以在 ActionDispatch::Http::MimeNegotation#formats
的实现中看到这一点。以下是 Rails v6.1 的摘录:
if params_readable?
Array(Mime[parameters[:format]])
elsif use_accept_header && valid_accept_header
accepts
elsif extension_format = format_from_path_extension
[extension_format]
elsif xhr?
[Mime[:js]]
else
[Mime[:html]]
end