有没有办法在 Rails 上的 Ruby 中保持 POSTed XML 的完整性?
Is there a way to keep POSTed XML in tact in Ruby on Rails?
我的 Rails 应用程序中有一个 REST API,用户将向其发布 XML。我知道 Rails(在这种情况下可能是 Rack)将发布的数据转换为参数散列。
我很好奇是否有办法让 Rails 不将 XML 转换为参数散列?相反,我想将 XML 作为字符串获取。我宁愿不将 Rails 转换为散列,然后使用 to_xml
将其转换回 xml 字符串。
XML 数据应作为 POST 请求中的参数发送。在您的单元测试中,它看起来像这样:
xml = <<-XML
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<foo type="integer">1</foo>
<bar type="integer">2</bar>
</hash>
XML
post :my_api_path, { 'model_data': xml }
在您的控制器中,您将提取 model_data
参数(如果您想从中提取数据,则将其解析为 XML):
class XmlPassingController
def save
# XML as a string
pp params[:model_data]
# XML used for attributes to create a model instance
my_model = MyModel.from_xml(params[:model_data])
pp my_model
end
end
这是我需要在控制器操作中执行的操作,以便从 POST 请求中获取原始 xml:
request.raw_post
请求的 raw_post 方法将 return 请求的原始主体。
我的 Rails 应用程序中有一个 REST API,用户将向其发布 XML。我知道 Rails(在这种情况下可能是 Rack)将发布的数据转换为参数散列。
我很好奇是否有办法让 Rails 不将 XML 转换为参数散列?相反,我想将 XML 作为字符串获取。我宁愿不将 Rails 转换为散列,然后使用 to_xml
将其转换回 xml 字符串。
XML 数据应作为 POST 请求中的参数发送。在您的单元测试中,它看起来像这样:
xml = <<-XML
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<foo type="integer">1</foo>
<bar type="integer">2</bar>
</hash>
XML
post :my_api_path, { 'model_data': xml }
在您的控制器中,您将提取 model_data
参数(如果您想从中提取数据,则将其解析为 XML):
class XmlPassingController
def save
# XML as a string
pp params[:model_data]
# XML used for attributes to create a model instance
my_model = MyModel.from_xml(params[:model_data])
pp my_model
end
end
这是我需要在控制器操作中执行的操作,以便从 POST 请求中获取原始 xml:
request.raw_post
请求的 raw_post 方法将 return 请求的原始主体。