【问题标题】:Rails Skip Before Filter on API CallRails 在 API 调用过滤之前跳过
【发布时间】:2015-12-11 15:37:43
【问题描述】:

在进行 API 调用时,是否有任何方法可以跳过操作的前置过滤器?

所以通常我希望在执行 API 调用时执行 before_filter x。

skip_before_filter :x, :except => API CALL BEING MADE

【问题讨论】:

    标签: ruby-on-rails api skip before-filter


    【解决方案1】:

    这在一定程度上取决于您如何定义 API 调用。如果是 JSON 格式的任何请求,您可以执行以下操作:

    skip_before_action :x if: -> { request.format.json? }
    

    不过,这似乎不是一个理想的解决方案,最好为 Web 和 API 制作单独的控制器。您可以按照以下方式做一些事情:

    class APIController < ApplicationController
         # API-specific filters
    end
    
    class SomeOtherController < APIController
        # your API actions
    end
    

    您也可以对 Web 执行相同的操作,然后配置您的路由以将请求发送到正确的控制器操作。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      您可以在控制器中添加

          skip_before_action :x, only: WHEN API CALL BEING MADE
      

      我猜,你会想要 only 而不是 except

      【讨论】:

      • 你是对的 - 我的草率错误。但真正的问题是唯一/除外
      • 您需要输入处理 API 调用的操作名称。看看link,里面有类似的问题
      • 我希望每次 API 调用都使用它
      • 您的 API 调用将被路由到控制器中的某些操作,不是吗。你可以提到`skip_before_action :x, only: [:action1, :action2, :action3]`
      【解决方案3】:

      这不是您问题的直接答案,但您希望 API 和 Web 请求的不同行为这一事实可能是一种气味,即您的 API 请求可以由单独的控制器处理(我确信存在差异在您发送的回复中)。代码可能会更干净,控制器内部的分支更少。您甚至可以让两个控制器都继承自“基本”控制器,该控制器执行常见查询以消除重复。

      无论如何,exceptonly 只能接受控制器操作的名称,因此在您的回调方法中,您可以考虑在 request.headers["Content-Type"] == 'application/jsonrequest.xhr? 上进行分支

      【讨论】:

        猜你喜欢
        • 2022-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-09
        • 1970-01-01
        • 2014-04-26
        相关资源
        最近更新 更多