ASP.NET MVC实现POST方式的Redirect
来源: 阅读:725 次 日期:2015-08-20 15:12:12
温馨提示: 小编为您整理了“ASP.NET MVC实现POST方式的Redirect”,方便广大网友查阅!

我们知道,在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方式的重定向。

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map