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方式的重定向。
ASP.NET MVC实现POST方式的Redirect的更多相关文章
- [转]ASP.NET MVC实现POST方式的Redirect
本文转自:http://www.cnblogs.com/ryuasuka/p/3604452.html?utm_source=tuicool 我们知道,在ASP.NET MVC中,要从一个Action ...
- asp.net mvc各种传值方式大全
MVC 各种传值方式 ViewData传值. HomeController.cs Co de: public ActionResult Index(){ ViewData["Ti ...
- ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session
转载原地址 http://www.cnblogs.com/sunshineground/p/4350216.html 在ASP.NET MVC中,页面间Controller与View之间主要有以下几种 ...
- Asp.Net MVC Filter 实现方式和作用范围控制
MVC中的Filte 简单又优雅的实现了AOP ,在日志,权限,缓存和异常处理等方面用的比较多.但本文不是讨论Filter这些功能点,而是总结Filter实现的方式.说实现也不太准确,也就是它的呈现方 ...
- ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单
有时候,不得不考虑到以下场景问题: 数据库表字段会频繁更改扩展,而流行的重业务的js框架过于依赖json数据接口,导致的问题是,数据库表更改 -> 数据接口更改 -> 前段框架逻辑更改.. ...
- Asp.net mvc 知多少(五)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- 为什么要坚持用ASP.NET MVC!(②)
尽管ASP.NET MVC架构和Web Form架构区别很大,但是还是有很多共同之处.毕竟它们都是以ASP.NET API与.NET框架为基础构建的.比较一下ASP.NET MVC和Web Form框 ...
- MVC Filter 实现方式和作用范围控制
Asp.Net MVC Filter 实现方式和作用范围控制 MVC中的Filte 简单又优雅的实现了AOP ,在日志,权限,缓存和异常处理等方面用的比较多.但本文不是讨论Filter这些功能点,而是 ...
- ASP.NET MVC开发学习过程中遇到的细节问题以及注意事项
1.datagrid中JS函数传值问题: columns: { field: 'TypeName', title: '分类名称', width: 120, sortable: true, format ...
随机推荐
- [转]Oracle分页之三:利用PagerView来实现无刷新GridView
本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018355.html 接上面一节,上面还存在问题就是分页控件使用的仍然是服务器端控 ...
- [转]设定version 更新js缓存
http://zhenggm.iteye.com/blog/680600 遇到的问题: 在访问量比较大的系统中,我们需要将一些静态的文件在客户端缓存,以减少下载的流量,从而加快客户端访 ...
- 计算机中的颜色XIV——快速变换颜色的V分量
基本知识回顾: 计算机中的颜色Color,用RGB模式存储(用R.G.B三个分量表示颜色,每个分量的范围是0—255). 而计算机中的颜色除了用RGB模式表示以外,常见的还有HSV模式(或者是HSB. ...
- 关于TouchEvent里面的touches,targetTouches,changedTouches的解释
touches:手指触摸到屏幕上引起的当前所有触摸点的集合; targetTouches:手指触摸到绑定事件的节点上的触摸点的集合; changedTouches:触摸事件时改变触摸点的集合; 以下 ...
- shell script 学习笔记-----命令执行
1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...
- 2014 Super Training #10 C Shadow --SPFA/随便搞/DFS
原题: FZU 2169 http://acm.fzu.edu.cn/problem.php?pid=2169 这题貌似有两种解法,DFS和SPFA,但是DFS怎么都RE,SPFA也要用邻接表表示边, ...
- JSP中文乱码问题《转》
之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因. 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 ...
- 异常:NSException和NSAssert的简单使用
//断言 - (void)NSAssert_Test:(NSString *)string{ NSAssert(string == nil, @"string == kong or nil& ...
- nodejs 针对 mysql 设计的原型库,支持事务/共享多次/单次查询
//通过this访问内置流程对象, 在每个流程中都能使用 //this.conn => mysql-connection //this.results => 整个流程数已经返回的值 //t ...
- Linux 网络编程一(TCP/IP协议)
以前我们讲过进程间通信,通过进程间通信可以实现同一台计算机上不同的进程之间通信. 通过网络编程可以实现在网络中的各个计算机之间的通信. 进程能够使用套接字实现和其他进程或者其他计算机通信. 同样的套接 ...