为 Sinatra 设置默认 content_type

Posted

技术标签:

【中文标题】为 Sinatra 设置默认 content_type【英文标题】:Set default content_type for Sinatra 【发布时间】:2011-06-05 15:37:10 【问题描述】:

在 Sinatra 中是否可以将 content_type 'application/json' 设为默认值?因为我正在构建一个 REST API。

【问题讨论】:

【参考方案1】:

当然,将content_type 添加到before 回调中:

class MyApp < Sinatra::Base

  before do
    content_type 'application/json'
  end

  ...

end

Sinatra 1.1 在过滤器之前引入模式匹配:

before '/admin/*' do
  check_logged_in
end

【讨论】:

谢谢!如何创建一个上下文,以便 before 过滤器仅应用于特定的一组路由而不是全部? @MattDiPasquale 这应该可以解决问题:blog.alastairdawson.com/2010/07/27/a-sinatra-before-only-filter @MattDePasqaule 您还可以覆盖单个路由中的内容类型。 sinatra 1.1 支持pattern before filter,所以不需要打补丁。 @Konstantin 感谢您的提醒,比我的建议要好得多。【参考方案2】:

对于 JSON API,为所有响应设置默认 Content-Type 的最推荐方法是在 Sinatra 类中添加以下内容:

set :default_content_type, :json

它将在您的所有回复中包含Content-Type: application/json 标头。

【讨论】:

甚至set :default_content_type, :json

以上是关于为 Sinatra 设置默认 content_type的主要内容,如果未能解决你的问题,请参考以下文章

Sinatra 和机架保护设置

跨多个域名使用 Sinatra 会话变量?

markdown 使用Active Record设置Sinatra

与Sinatra一起设计

Sinatra 的友好 URL

使用 ruby​​、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?