controller中request變數的用法

2021-07-15 14:31:54 字數 3674 閱讀 5218

controller

的action

之中,rails

提供了一些方法可以讓你得知此

request

各種資訊,包括:

·        

action_name 

目前的action名稱

·        

cookies cookie下述

·        

headers http標頭

·        

params 

包含使用者所有傳進來的引數

hash

,這是最常使用的資訊

·        

request 

各種關於此

request

的詳細資訊

或xhr?

·        

url

·        

protocol, host, port,path 

和query_string

·        

domain

·        

host_with_port

·        

port_string

·        

ssl?

·        

remote_ip?

·        

path_without_extension,path_without_format_and_extension, format_and_extension, relative_path

·        

env

·        

accepts

·        

format

·        

mime_type

·        

content_type

·        

headers

·        

body

·        

content_length

·        

response 

代表要回傳的內容,會由

rails

設定好。通常你會用到的時機是你想加特別的

response header。

·        

session session下述

正確的說,

params

這個hash

activesupport::hashwithindifferentaccess物件,而不是普通的

hash

而已。ruby

內建的hash

,用symbol

hash[:foo]和用字串的hash["foo"]是不一樣的,這在混用的時候常常搞錯而取不到值,算是常見的臭蟲**。

rails

在這裡使用的activesupport::hashwithindifferentaccess物件,無論鍵是

symbol

或字串,都指涉相同的值,減少麻煩

取得網域名稱 :

request.domain #=> 

zool.it request.domain(2) #=> blog.zool.it

取得子網域名稱:

request.subdomain #=> 

"test.blog" request.subdomain(2) #=> "test"

request.subdomain #=> 

["test", "blog"] request.subdomain(2) #=> ["test"]

取得主機名:

request.host #=> "test.blog.zool.it"

取得帶埠的主機名:

request.host_with_port #=> "test.blog.zool.it:3000"

**伺服器的主機名和埠:

request.raw_host_with_port #=> "test.blog.zool.it:3000"

取得由raw_host_with_port()獲得的埠數值

request.port #=> 3000

取得raw_host_with_port()獲得的埠文字字串

request.port_string #=> ":3000"

取得當前使用網路協議

取得網路協議

request請求的uri位址

request.request_uri #=> "/posts/hello-world"

取得由env['server_port']返回的埠值

request.server_port #=> "3000"

當前是否在是用https加密協議

request.ssl?() #=> false

返回網路協議標準埠(http為80, https為443)

request.standard_port #=> 80

判斷當前協議是否是標準埠

request.standard_port? #=> false

取得當前requset完整url

request.url #=> ""

獲取客戶端ip

request.remote_ip 

例項:(payments_controller.rb中)

def wechat_prepay

@order = current_user.orders.find_by_number(params[:number])

res = @order.wechat_prepay_id(request.remote_ip)

render json: res

enddef wechatpay_notify

result = hash.from_xml(request.body.read)["xml"]

notify_params = result

@result_code = "failed"

activerecord::base.transaction do

notify_params = notify_params.symbolize_keys

if wxpay::sign.verify?(notify_params)

payment.get_pay("wechatpay", notify_params)

@result_code = "success"

else

raise "wechatpay verify failed"

endend

respond_to do |format|

format.xml

endend

strtusAction中的獲取request

public abstract class baseaction extends actionsupport implements servletrequestaware,sessionaware protected httpservletrequest request 請求的request物件 p...

SpringMVC中controller的跳轉

方式一 使用modelandview return new modelandview redirect tolist 這樣可以重定向到tolist這個方法 方式二 返回string return redirect tolist 方式一 自己手動拼接url new modelandview redir...

spring中的controller種類

一 spring mvc中常見controller 1 org.springframework.web.servlet.mvc.parameterizableviewcontroller 這個controller主要用在不需要後台業務邏輯處理的地方,直接在配置檔案中指定檢視渲染的路徑,如下 需要先在...