ruby - 在 Sinatra 中处理 405

标签 ruby sinatra

在 Sinatra 中,如果我创建一个简单的端点,例如:

post '/users' do 
    'posted'
end

curl -v -X GET http://localhost:8080/users 返回 404,而我期望的是 405。

我查看了文档,但没有找到任何内容。在深入研究源代码之前,有人知道如何在 Sinatra 中处理和返回 405 吗?有点像 not found 方法:

not_found do
    'Not found - ' + request.path
end

最佳答案

你得到了一个 404,因为 sinatra 找不到获取路由/users。如果你想返回自定义错误,你可以查看 Halt

抛出一个错误

您可以像这样在 get/users 上返回 405:

get "/users" do
    halt 405
end

要一次捕获多个 http 动词,您可以使用 multi route

require 'sinatra'
require "sinatra/multi_route"
route :get, :post, '/foo' do
  # "GET" or "POST"
  p request.env["REQUEST_METHOD"]
end

# Or for module-style applications
class MyApp < Sinatra::Base
  register Sinatra::MultiRoute
  route :get, :post, '/foo' do
    # ...
  end
end

source

处理错误

如果你想在 sinatra 中处理错误代码,你可以简单地处理 404 错误:

not_found do
  'This is nowhere to be found.'
end

在您的情况下处理 405 错误:

error 405 do
  'Access forbidden'
end

关于ruby - 在 Sinatra 中处理 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16408609/

相关文章:

ruby-on-rails - 提供日期范围的更好方法

ruby 全局变量美元符号分号 ($;) 正则表达式等效

ruby - 在 ruby​​ 中类型转换为整数

ruby-on-rails - 在 Rails 模块中显式调用模型对象?

javascript - Angular JS删除Sinatra的方法

ruby - 有没有办法将 html 刷新到 Sinatra 中的线路

ruby-on-rails-3 - 在 Heroku 中的 Sinatra 和 Rails 应用程序之间共享 MongoHQ 数据库

ruby-on-rails - 运行时出现错误消息 "Rails S"& "$ bundle exec rspec spec/requests/static_pages_spec.rb"

ios - 从设备连接到本地 mac 服务器

testing - 转换为模块化 sinatra 应用程序中断测试