获取请求的内容类型

24

要查找传入的内容类型,文档说

 request.headers["Content-Type"] # => "text/plain"

但是通过反复试验,我发现那并不起作用,但是这个方法可以:
 request.headers["CONTENT_TYPE"]=='application/json'

那么最稳健+可移植的方法是什么?


你正在使用哪个版本的Rails? - Intrepidd
5
根据他贴上的标签,可能是3.1。 - DRobinson
7个回答

44

#binding.pry respond_to do |format| if (request.content_type == "application/json") format.json {render json: @user} elsif (request.content_type == "application/xml") format.xml {render xml: @user} else format.html end end - user3252885

26

你不需要解析content_type字符串,Rails已经为你做了这个工作。只需要检查:

request.format.symbol == :json

24

另一种写法:

request.format.json?

但是如果请求的接受头是 */*,它仍然会是 false,对吧? - Nathan B

12

不需要调用 #symbol,因为 equals 被重载了:

request.format == :json

3

对于我来说检查传入请求是否为json的最佳方法是:

    if request.content_type =~ /json/

2

如果请求格式为'application/json'


1
严肃地需要关注这里。参考Rails 6.x api only项目
您必须确保为什么要请求.content_type或请求头['Content-Type']?如下所述...
  1. 请求.format或请求头['Accept']是客户端通过API(服务或服务器)期望请求响应的格式。

  2. 请求.content_type或请求头['Content-Type']是API(服务或服务器)从请求中期望的数据格式。

因此,如果API(服务或服务器)希望以application/json格式请求数据,则请求.content_type或请求头['Content-Type']是正确的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接