1

目前,我有这样的事情:

def valid?(stuff)
  #...
end

get '/somewhere'
  return status 403 unless valid?(something) && valid?(something_else)
  # ...
end

(在这种特定情况下,我正在检查param包含文件名的 a 是否在该参数允许的目录内,以防止用户访问他们不应该访问的内容。)

但它变得笨拙,特别是因为我在多个地方都有相同的结构。我宁愿做这样的事情:

def ensure_valid(stuff)
  raise Forbidden unless valid?(stuff)
end

get '/somewhere'
  ensure_valid(something)
  ensure_valid(something_else)
  # ...
end

有这样的例外吗?如果没有,我如何配置 Sinatra(或 Rack,就此而言)以中止请求,status 403如果它捕获到自定义异常?

4

2 回答 2

3

halt 403 unless valid?(something) && valid?(something_else)也应该工作

来源:http ://www.sinatrarb.com/intro.html#Halting

于 2013-08-08T08:08:46.257 回答
1

也许您正在寻找的是“错误”块?

http://www.sinatrarb.com/intro.html#Error

error MyCustomError do
    return status 403
end

raise MyCustomError unless valid?(thing)
于 2013-08-07T07:17:24.703 回答