ASP.NET MVC實現POST方式的Redirect
添加時間:2014-12-18 19:45:03
添加:
思海網絡
我們知道,在ASP.NET MVC中,要從一個Action跳轉到另一個Action,通常是用一系列以“Redirect”開頭的方法
- Redirect
- RedirectToAction
- RedirectToRoute
之類的。
但是使用Redirect系列的方法進行跳轉時,默認是使用GET方法的,也就是說,如果你的跳轉請求帶有參數,那么這些參數將全部暴露在跳轉后的url中,增加了不安全性(特別是如果參數中包含密碼、密鑰等等敏感數據)
于是就想到了用POST方法傳遞數據,這樣至少一般的訪問者無法從url中獲取敏感信息。但是仔細查閱了MSDN和StackOverflow,得到的答案是“Redirect方法不支持POST”。
好在StackOverflow上找到一個回答 點我 ,倒是給我一些啟發。直接POST不行,那就間接POST,先通過一個GET方法獲取某個頁面,然后以這個頁面為中介將數據POST給真正要處理請求的頁面。
下面給出一個示例代碼。在這個示例代碼中,有兩個頁面Login和AfterLogin,要求在Login中輸入用戶名和密碼后跳轉到AfterLogin,并攜帶一個由UserAppModel定義的數據列表
public class UserAppModel { public string UserId { get; set; } public string ClientId { get; set; } public string RedirectUri { get; set; } }
這些信息將在使用GET方法加載Login頁面時獲取。
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(); }
界面設計就省略了,無非是兩個文本框和一個submit按鈕。
之后對Login要有個HttpPost方法來接收登錄數據,并構造UserAppModel的數據發到新的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需要兩個方法,一個采用GET方式,一個采用POST方式,通過GET方式的頁面去調用POST方式的頁面,就實現了使用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); }
結論:Redirect系列方法不支持POST,但是可以通過間接的做法實現POST方式的重定向。
關鍵字:ASP.NET、數據、POST
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解