在
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主要用在不需要後台業務邏輯處理的地方,直接在配置檔案中指定檢視渲染的路徑,如下 需要先在...