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

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

Redirect

RedirectToAction

RedirectToRoute

之類的。

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

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

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

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

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方法來接收登錄數(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需要兩個方法,一個采用GET方式,一個采用POST方式,通過GET方式的頁面去調(diào)用POST方式的頁面,就實現(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,但是可以通過間接的做法實現(xiàn)POST方式的重定向。

更多信息請查看IT技術專欄

更多信息請查看網(wǎng)絡編程
易賢網(wǎng)手機網(wǎng)站地址:ASP.NET MVC實現(xiàn)POST方式的Redirect

2025國考·省考課程試聽報名

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