簡體   English   中英

rails 如何確定傳入的請求格式?

[英]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 開始,響應格式通過檢查來確定:

  1. format參數(例如/url?format=xml
  2. HTTP Accept header (例如Accept: application/json
  3. 路徑擴展名(例如/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM