深爱那片海 发表于 2015-1-16 22:17:32

ASP.NET教程之ASP.NET MVC完成POST体例的Redirect

以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?我们晓得,在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界说的数据列表
publicclassUserAppModel{publicstringUserId{get;set;}publicstringClientId{get;set;}publicstringRedirectUri{get;set;}}这些信息将在利用GET办法加载Login页面时猎取。
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页面。
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的重定向
////POST:/Home/AfterLoginpublicActionResultAfterLogin(UserAppModelmodel){ViewData["model"]=model;returnView(model);}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呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。

柔情似水 发表于 2015-2-9 01:37:11

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

仓酷云 发表于 2015-2-26 17:32:10

asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源

透明 发表于 2015-3-8 16:25:00

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

冷月葬花魂 发表于 2015-3-16 05:21:37

比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。

乐观 发表于 2015-3-22 20:14:19

asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
页: [1]
查看完整版本: ASP.NET教程之ASP.NET MVC完成POST体例的Redirect