目前,我有这样的事情:
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
如果它捕获到自定义异常?