路由文件中是否有方法可以检查和验证URL参数。我不是在谈论宁静的'/ controller / action /:id'参数,而是'控制器/动作?param1 = x& param2 = y& param3 = z'。我需要能够验证每个参数并要求它们。
答案 0 :(得分:8)
是的,你可以。例如,要检查param1是否存在且不是空白,您将执行以下操作:
match 'c/action' => 'c#action', :constraints => lambda{ |req| !req.params[:param1].blank? }
您还可以限制这些约束以将它们应用于多个路径:
scope :constraints => lambda{ |req| !req.params[:param1].blank? } do
match 'controller/action1' => 'controller#action1'
match 'controller/action2' => 'controller#action2'
end
答案 1 :(得分:2)
Pan Thomakos概述的约束方法的问题在于,它将阻止具有无效参数集的URL到达您的代码库,并且您能够以有意义的方式响应用户(用户将看到未找到页面)错误我相信。)
如果满足您的要求,那很好,但更方便用户的方法是将参数验证移动到相应的控制器中,在您的操作方法中,您将通过这个操作方法收到的一组参数,如果有的话如果缺少必需的,您将构造一个含义消息并通过:notice
将其错误地反馈给用户