无法访问葡萄中间件中的env ['api.endpoint']

问题描述 投票:0回答:2

这里使用Grape write API函数。我想要限制API(API速率限制)。

LIB /葡萄/扩展/ grape_extension.rb

module Grape
  module Extension
    module ThrottleExtension
      def throttle(options={})
        route_setting :throttle, options
        options
      end
      Grape::API.extend self
    end
  end
end

LIB /葡萄/中间件/ throttle_middleware.rb

module Grape
  module Middleware
    class ThrottleMiddleware < Grape::Middleware::Base
      def before
        binding.pry
      end
    end
  end
end

LIB / grape_throttle.rb

require 'grape'
require 'grape/extensions/throttle_extension'
module Grape
  module Middleware
    autoload :ThrottleMiddleware, 'grape/middleware/grape_middleware'
  end
end

最后,在config/application.rb

require File.expand_path('../../lib/grape_throttle', __FILE__)
config.middleware.use Grape::Middleware::ThrottleMiddleware

并且,当我使用rails s运行并调用api时,binding.pry已经调用了。

[1] pry(#<Grape::Middleware::ThrottleMiddleware>)> env['api.endpoint']
=> nil

我想知道如何在Grape中间件中访问env ['api.endpoint']?

api grape
2个回答
0
投票

您可以通过::访问env

endpoint = @env["api.endpoint"]

我在非rails应用程序中尝试了这个并且它有效。您将获得变量中api端点的所有详细信息。


0
投票

我意识到这已经有几年了,但是我们今天在生产中遇到了这个问题,这是因为标题中的“内容类型”没有设置为“application / json”。检查您的请求中发送的内容。

我无法弄清楚为什么,但我也能在use :<middleware_name>评论我们的Grape::API,我立即从葡萄中间件得到了"error": "The requested content-type 'text/plain' is not supported."

© www.soinside.com 2019 - 2024. All rights reserved.