Rails 7纯API应用:如何获取传入JSON的action参数且不改键名?
在Rails 7纯API应用中获取传入JSON的
:action参数(不修改键名) Rails的params对象会自动混入控制器默认的:action参数(即当前执行的方法名),导致你传入的JSON里的:action被覆盖。要拿到原始传入的:action,可以用以下两种方式:
方式一:直接解析原始请求体
绕过Rails自动合并的参数,直接读取请求体的原始JSON内容:
def event_callback # 读取并解析原始请求体 raw_payload = JSON.parse(request.body.read) # 重置请求体指针,避免后续代码无法读取请求体 request.body.rewind incoming_action = raw_payload['action'] return unless incoming_action == 'envelopefinished' # 其他业务逻辑,仍可使用event_params获取经过强校验的参数 # ... end
方式二:整合到强参数方法中
如果想在event_params里直接获取传入的:action,可以调整强参数的逻辑:
def event_params raw_payload = JSON.parse(request.body.read) request.body.rewind # 对原始payload做强参数校验 raw_payload.permit(:event, :envelopeId, :action, :recipient) end # 控制器方法里正常使用 def event_callback return unless event_params[:action] == 'envelopefinished' # ... end
注意事项
- 上述方法仅适用于JSON格式的请求,建议在BaseController中添加校验确保请求格式:
before_action :verify_json_request private def verify_json_request return if request.content_type == 'application/json' render json: { error: 'Only JSON requests are allowed' }, status: :unsupported_media_type end - 务必保留强参数校验,避免mass assignment安全问题。
内容的提问来源于stack exchange,提问作者mr_muscle
相关产品推荐
相关产品推荐

