ActionController::UnknownFormat 带有图像 HTTP_ACCEPT(Ruby 在 Rails 上)

ActionController::UnknownFormat with image HTTP_ACCEPT (Ruby on Rails)

网站突然开始抛出大量 ActionController::UnknownFormat 异常。似乎有很多 image/* 请求。但是该函数不应该处理此类请求,它会给出 ActionController::UnknownFormat 错误。它只管理 HTML 和 JS 请求。

在 Rails 上的 Ruby 中管理这些请求的最佳方法是什么,以及我们如何避免此类不需要的请求而不会出错。

这是一个示例代码:

if params[:verification_token].present?
  setup_verification
end 
@participants = ProjectParticipant.includes(:business_activities, :employments, company: :logo).awarded.where(project_id: @project.id)
@company_participation = @participants.where(company_id: @company.id).first
@project_participants = @participants.where.not(company_id: @company.id)


    q = ERB::Util.url_encode(@project.title)

    @response = JSON.parse(get_articles("https://www.googleapis.com/customsearch/v1?q=#{q}&exactTerms=#{q}&start=1&cx=#{ENV['CUSTOM_SEARCH_IDENTIFIER']}&key=#{ENV['GOOGLE_API_KEY']}&sort=date"))
    track_analytics_event if @project

    respond_to do |format|
      format.html # show.html.erb
      format.js
    end

我正在使用 ruby 2.5 和 rails 5.1.6。

处理这些请求的一种方法是在 config/routes.rb 中的路由上添加格式限制。例如,

get 'foo' => "application#bar", constraints: lambda { |req| req.format == :js || req.format == :html }

只会将接受类型为 js/html 的 'foo' 请求路由到 'application#bar' 操作。具有其他接受类型的请求将获得 404 响应。

另一种选择是在控制器内处理这些错误。像这样

rescue_from ActionController::UnknownFormat, with: :unknown_format_error

def unknown_format_error
  render(text: 'Unknown format.', status: :not_found)
end

这种方式使您能够自定义响应。