request.format return*/*

Ped*_*nha 8 xml curl ruby-on-rails http mime-types

我目前正在为RoR上的应用程序开发API

作为一个例子,我创建了一些XML,加载了创建对象所需的所有信息,让我们说一个Person,并使用Curl我将它提交给我的应用程序

我能够从控制器中调用我想要的创建操作,并且正确传递对象的哈希参数

但是现在我需要应用不同的行为,如果请求是否与XML有关,困扰我的是控制器request.format给出的原因*/*.

有线索吗?

curl -v -H "Content-Type: application/xml; charset=utf-8" --data-ascii @client.xml  http://foo.com:3000/clients?api_key=xxx

def create
  logger.debug request.format # produces "*/*"
  if request.format.xml?
    # never gets here 
  end
end
Run Code Online (Sandbox Code Playgroud)

Bob*_*man 15

*/*表示用户代理接受所有格式,并不关心您提供的格式.我相信Safari可以做到这一点.默认情况下,curl发送一个Accept标头*/*.

以下是curl默认情况下发送的标头转储:

User-Agent: curl/7.18.1 (i386-apple-darwin9.6.0) libcurl/7.18.1 zlib/1.2.3
Host: example.com
Accept: */*
Content-Type: 
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,如果发送给您的有效负载是XML,您似乎想要发回XML?如果是这种情况,您想直接检查请求的Content-Type标头.即,request.content_type是你想要的方法.

补遗:我对此有了更多的考虑,我认为最好的方法是首先检查request.format,只有这是不确定的检查request.content_type.从本质上讲,HTTP规范为客户端提供了能够告诉服务器"我给你XML,但我想要JSON回来".Accept标头是客户告诉你他们想要什么的方式,如果有人实际发送它,你应该尊重它.如果客户端未指定,则仅将请求的Content-Type用作提示.