gpt4 book ai didi

ruby-on-rails - 通过路线自定义错误的Rails-读取原始请求的URL

转载 作者:行者123 更新时间:2023-12-03 07:41:55 25 4
gpt4 key购买 nike

我正在使用自定义错误 Controller 。访问500页URL时,我希望有200个响应代码(否则,只要我想炫耀我的500个,我的拦截500个响应代码的中间件都会向我发送异常电子邮件)

似乎使用self.routes作为exceptions_app会将request.path更改为始终等于错误号

目标

  • 请访问www.example.com/crashy_url#=>应该显示具有500个响应代码
  • 的自定义500错误模板
  • 请访问www.example.com/500#=>应显示带有200个响应代码的自定义500错误模板

  • 问题
  • 访问www.example.com/crashy_url#=> request.path等于`/500',因此我的 Controller 发送200响应码

  • 我该如何提取真正访问的URL?
    # config/application.rb
    config.exceptions_app = self.routes

    # routes
    match '/500', to: 'errors#server_error', via: :all

    # app/controllers/errors_controller.rb
    def server_error
    @status = 500
    can_be_visited_with_ok_response_code
    show
    end

    def can_be_visited_with_ok_response_code
    # We want to hide hide the faulty status if the user only wanted to see how our beautiful /xxx page looks like
    # BUT `action_dispatch/middleware/debug_exceptions` will change request.path to be equal to the error !!
    # @status = 200 if request.path == "/#{@status}" # BAD request.path will always return response code
    end

    def show
    respond_to do |format|
    format.html { render 'show', status: @status }
    format.all { head @status }
    end
    end

    最佳答案

    我喜欢Ruby和did_you_mean ...我能够猜出正确的方法名称:应该使用request.original_fullpath代替,以获取用户输入的原始URL。

    @status = 200 if request.original_fullpath == "/#{@status}"

    请注意, request.original_url也可以为您提供完整的路径,包括主机名

    关于ruby-on-rails - 通过路线自定义错误的Rails-读取原始请求的URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43771623/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com