Как я могу изменить MIME-тип запроса после его получения? - PullRequest
1 голос
/ 29 октября 2011

Мои клиенты отправляют запросы на мои приложения rails в формате XML или HTML.Под rails 2.10 у моего действия контроллера был блок responseds_to с want.html и want.xml.Мои клиенты установили свои заголовки HTTP для Content-Type = text / xml и Accept = text / xml, если они хотели XML и в значительной степени оставили заголовки для HTML.Отлично сработало.

Оказывается, что большое количество моих клиентов все время пропускали заголовок Accept = text / xml, но блок response_to запускал want.xml, если они установили Content-type = text / xml.На rails3 блок response_to (правильно) запускает файл want.xml, только если установлен Accept = text / xml.

Вместо того, чтобы многие мои клиенты меняли свои программы, как я могу сказать rails3, что для запроса требуется XML?Я думаю, что если я увижу Content-Type, установленный на text / xml, я заставлю Accept также быть text / xml.

Я попытался изменить хеш request.env напрямую так:

class MyController < ApplicationController

def my_xml_or_html_action
  if request.env['CONTENT_TYPE'].to_s.match(/xml/i)
    request.env['HTTP_ACCEPT'] = 'text/xml'
  end
  respond_to do |wants|
    wants.html { redirect_to html_response }
    wants.xml { render xml_response }
  end
end

но это не сработало.Я мог бы полностью отказаться от response_to и сделать что-то вроде:

class MyController < ApplicationController

def my_xml_or_html_action
  if request.env['CONTENT_TYPE'].to_s.match(/xml/i)
    redirect_to html_response
  else
    render xml_response
  end
end

, но это кажется грубой силой.Есть ли более грубый способ сделать это?

1 Ответ

1 голос
/ 29 октября 2011

Попробуйте:

params[:format] = :xml

Должно работать.

...