![](/img/trans.png)
[英]Rails: How to process incoming POST Request in non-json/custom format?
[英]How does rails determine incoming request format?
我只是想知道 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'
});
当这个请求到达 controller 动作时,用 ruby 调试器站在它里面,我检查@request.format,我可以看到内容类型是 application/json。 然后 controller 按预期响应 json 格式。
但我对路线中指定的格式符号感到困惑。 假设向example.com/parts.json发出请求,但请求中的内容类型是 application/html 或 application/xml。 controller 是否响应 json 格式或 html 或 Z0F635D0E0F3874FFF7A7A726?
谢谢!
来自ActionController::MimeResponds :“Rails 从 HTTP 确定所需的响应格式,接受客户端提交的 header。”
传入的Content-Type
仅影响解析请求的方式。 它不影响响应格式。
从 Rails 5.0 开始,响应格式通过检查来确定:
format
参数(例如/url?format=xml
)Accept
header (例如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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.