ASP.NET MVC實(shí)現(xiàn)POST方式的Redirect
來源:易賢網(wǎng) 閱讀:789 次 日期:2015-08-20 15:12:12
溫馨提示:易賢網(wǎng)小編為您整理了“ASP.NET MVC實(shí)現(xiàn)POST方式的Redirect”,方便廣大網(wǎng)友查閱!

我們知道,在ASP.NET MVC中,要從一個(gè)Action跳轉(zhuǎn)到另一個(gè)Action,通常是用一系列以“Redirect”開頭的方法

Redirect

RedirectToAction

RedirectToRoute

之類的。

但是使用Redirect系列的方法進(jìn)行跳轉(zhuǎn)時(shí),默認(rèn)是使用GET方法的,也就是說,如果你的跳轉(zhuǎn)請求帶有參數(shù),那么這些參數(shù)將全部暴露在跳轉(zhuǎn)后的url中,增加了不安全性(特別是如果參數(shù)中包含密碼、密鑰等等敏感數(shù)據(jù))

于是就想到了用POST方法傳遞數(shù)據(jù),這樣至少一般的訪問者無法從url中獲取敏感信息。但是仔細(xì)查閱了MSDN和StackOverflow,得到的答案是“Redirect方法不支持POST”。

好在StackOverflow上找到一個(gè)回答 點(diǎn)我 ,倒是給我一些啟發(fā)。直接POST不行,那就間接POST,先通過一個(gè)GET方法獲取某個(gè)頁面,然后以這個(gè)頁面為中介將數(shù)據(jù)POST給真正要處理請求的頁面。

下面給出一個(gè)示例代碼。在這個(gè)示例代碼中,有兩個(gè)頁面Login和AfterLogin,要求在Login中輸入用戶名和密碼后跳轉(zhuǎn)到AfterLogin,并攜帶一個(gè)由UserAppModel定義的數(shù)據(jù)列表

public class UserAppModel

{

public string UserId { get; set; }

public string ClientId { get; set; }

public string RedirectUri { get; set; }

}

這些信息將在使用GET方法加載Login頁面時(shí)獲取。

public ActionResult Login(string client_id, string redirect_uri)

{

HttpCookie cookie = new HttpCookie("app");

cookie["client_id"] = client_id;

cookie["redirect_uri"] = redirect_uri;

Response.Cookies.Add(cookie);

return View();

}

界面設(shè)計(jì)就省略了,無非是兩個(gè)文本框和一個(gè)submit按鈕。

之后對Login要有個(gè)HttpPost方法來接收登錄數(shù)據(jù),并構(gòu)造UserAppModel的數(shù)據(jù)發(fā)到新的AfterLogin頁面。

[HttpPost]

public ActionResult Login(UserModel model)

{

if (ModelState.IsValid)

{

HttpCookie cookie = Request.Cookies["app"];

if (cookie != null)

{

if (model.UserId == "AAA" && model.Password == "aaa")

{

UserAppModel newModel = new UserAppModel();

newModel.UserId = model.UserId;

newModel.ClientId = cookie["client_id"];

newModel.RedirectUri = cookie["redirect_uri"];

TempData["model"] = newModel;

return RedirectToAction("AfterLogin", "Home");

}

ViewBag.Message = "Login error! Invalid user ID or password.";

}

}

return View();

}

AfterLogin需要兩個(gè)方法,一個(gè)采用GET方式,一個(gè)采用POST方式,通過GET方式的頁面去調(diào)用POST方式的頁面,就實(shí)現(xiàn)了使用POST的重定向

//

// POST: /Home/AfterLogin

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult AfterLogin(UserAppModel model)

{

ViewData["model"] = model;

return View(model);

}

[AcceptVerbs(HttpVerbs.Get)]

public ActionResult AfterLogin()

{

return AfterLogin(TempData["model"] as UserAppModel);

}

結(jié)論:Redirect系列方法不支持POST,但是可以通過間接的做法實(shí)現(xiàn)POST方式的重定向。

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:ASP.NET MVC實(shí)現(xiàn)POST方式的Redirect
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)