如果无效,如何 'drop' 一个 POST 请求
How to 'drop' a POST request if it is invalid
如果请求被视为无效,您如何编写一个忽略请求的前置过滤器?
最简单的设计是检查传入请求中是否存在所有字段。如果其中之一不是,我希望 Rails 应用程序 return 提供足够的信息,以便我可以测试验证。
现在,我有一个很简单的想法:
class ListenerController < ApplicationController
skip_before_filter :requires_login, :requires_employee
before_filter :validate
protect_from_forgery except: :create
def create
render nothing: true
Listener.process(params)
end
private
def validate
return_invalid unless params[:id].present?
return_invalid unless params[:content].present?
return_invalid unless params[:summary].present?
return_invalid unless params[:displayName].present?
true
end
def return_invalid
#do something to return simple message
end
end
谢谢。
您可以呈现 400 状态代码。
def return_invalid
head(400)
end
Rails 将立即 return 在过滤器的末尾并呈现状态代码。
如果您想要更用户友好的内容(例如一条消息),则重定向到一个操作(相同或 "new")并将消息作为 flash
消息传递。
def return_invalid
redirect_to { action: "new" }, alert: "Something is wrong"
end
如果请求被视为无效,您如何编写一个忽略请求的前置过滤器?
最简单的设计是检查传入请求中是否存在所有字段。如果其中之一不是,我希望 Rails 应用程序 return 提供足够的信息,以便我可以测试验证。
现在,我有一个很简单的想法:
class ListenerController < ApplicationController
skip_before_filter :requires_login, :requires_employee
before_filter :validate
protect_from_forgery except: :create
def create
render nothing: true
Listener.process(params)
end
private
def validate
return_invalid unless params[:id].present?
return_invalid unless params[:content].present?
return_invalid unless params[:summary].present?
return_invalid unless params[:displayName].present?
true
end
def return_invalid
#do something to return simple message
end
end
谢谢。
您可以呈现 400 状态代码。
def return_invalid
head(400)
end
Rails 将立即 return 在过滤器的末尾并呈现状态代码。
如果您想要更用户友好的内容(例如一条消息),则重定向到一个操作(相同或 "new")并将消息作为 flash
消息传递。
def return_invalid
redirect_to { action: "new" }, alert: "Something is wrong"
end