仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 795|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET教程之ASP.NET MVC完成POST体例的Redirect

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?我们晓得,在ASP.NETMVC中,要从一个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界说的数据列表
  1. publicclassUserAppModel{publicstringUserId{get;set;}publicstringClientId{get;set;}publicstringRedirectUri{get;set;}}
复制代码
这些信息将在利用GET办法加载Login页面时猎取。
  1. publicActionResultLogin(stringclient_id,stringredirect_uri){HttpCookiecookie=newHttpCookie("app");cookie["client_id"]=client_id;cookie["redirect_uri"]=redirect_uri;Response.Cookies.Add(cookie);returnView();}
复制代码
界面计划就省略了,不过是两个文本框和一个submit按钮。
以后对Login要有个HttpPost办法来吸收登录数据,并机关UserAppModel的数据发到新的AfterLogin页面。
  1. [HttpPost]publicActionResultLogin(UserModelmodel){if(ModelState.IsValid){HttpCookiecookie=Request.Cookies["app"];if(cookie!=null){if(model.UserId=="AAA"&&model.Password=="aaa"){UserAppModelnewModel=newUserAppModel();newModel.UserId=model.UserId;newModel.ClientId=cookie["client_id"];newModel.RedirectUri=cookie["redirect_uri"];TempData["model"]=newModel;returnRedirectToAction("AfterLogin","Home");}ViewBag.Message="Loginerror!InvaliduserIDorpassword.";}}returnView();}
复制代码
AfterLogin必要两个办法,一个接纳GET体例,一个接纳POST体例,经由过程GET体例的页面往挪用POST体例的页面,就完成了利用POST的重定向
  1. ////POST:/Home/AfterLogin[AcceptVerbs(HttpVerbs.Post)]publicActionResultAfterLogin(UserAppModelmodel){ViewData["model"]=model;returnView(model);}[AcceptVerbs(HttpVerbs.Get)]publicActionResultAfterLogin(){returnAfterLogin(TempData["model"]asUserAppModel);}
复制代码
结论:Redirect系列办法不撑持POST,可是能够经由过程直接的做法完成POST体例的重定向。
不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听)
爱飞 该用户已被删除
沙发
发表于 2015-1-19 06:48:43 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-25 18:09:46 | 只看该作者
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
小女巫 该用户已被删除
地板
发表于 2015-2-3 12:40:22 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
柔情似水 该用户已被删除
5#
发表于 2015-2-9 01:37:11 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
6#
发表于 2015-2-26 17:32:10 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
透明 该用户已被删除
7#
发表于 2015-3-8 16:25:00 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-16 05:21:37 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
乐观 该用户已被删除
9#
发表于 2015-3-22 20:14:19 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-10 06:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表