|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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界说的数据列表- 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页面。- [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的重定向- ////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和面向服务的课也应该听一听) |
|