ASP.NET网页设计[ASP.NET]HttpCookieCollection to CookieCollection的最复杂办法仓酷云
J2EE比较成熟一点,一些比较出名的企业应用软件都是基于J2EE的。以后的发展就不好说了。不过net网页编程比较烦,学.net的话,微软把很多工具都封装好了,学起来可能容易一点。System.Web.HttpCookieCollection是System.Web.HttpContext.Current.Request.Cookies与System.Web.Mvc.Controller.Controller.Cookies的范例,用于猎取客户端扫瞄器传送过去的cookie。System.Net.CookieCollection是System.Net.HttpWebRequest.CookieContainer顶用到的,用于倡议WebRequest哀求时带上cookie。
成绩场景
在以后的ASP.NETMVC程序中将扫瞄器发过去的cookie一成不变地发给背景一个供应服务的站点。之前的做法是在这个ASP.NETMVC程序中从cookie中读取数据,然后以此数据为参数经由过程WCF挪用背景服务。此次我们盘算弃用WCF,间接用HttpWebRequest基于复杂天真的HTTP来处置。
因而就面对怎样传送cookie的成绩。起首想到的是HttpWebRequest.CookieContainer,但CookieContainer必要的是CookieCollection,我们在MVC程序中经由过程Request.Cookies失掉的倒是HttpCookieCollection。然后,成绩就酿成了怎样将HttpCookieCollection转换为CookieCollection?
办理历程
在stackoverflow上找到了一个办理办法(SendingcookiesusingHttpCookieCollectionandCookieContainer):
HttpCookieCollectionoCookies=Request.Cookies;for(intj=0;j<oCookies.Count;j++){HttpCookieoCookie=oCookies.Get(j);CookieoC=newCookie();//ConvertbetweentheSystem.Net.CookietoaSystem.Web.HttpCookie...oC.Domain=myRequest.RequestUri.Host;oC.Expires=oCookie.Expires;oC.Name=oCookie.Name;oC.Path=oCookie.Path;oC.Secure=oCookie.Secure;oC.Value=oCookie.Value;myRequest.CookieContainer.Add(oC);}
可是这个烦琐的办理办法看着别扭,用着舒服。假如就如许办理成绩,一点成绩感都没有。哪是享用代码,明白是做一天码农,对付一天代码。
好的办理办法老是复杂的、文雅的,必定有更好的办理办法。抱着如许的信心高低求索,在园子里发明一篇冗长的博文(HttpWebRequest和Cookie的一些纪录),个中的一段代码让人长远一亮:
HttpWebRequest.Headers.Add("Cookie","Cookie的值");
cookie不就是httpheader中的一段字符串吗?从这个httpheader中读掏出来,放到另外一个httpheader中不就好了吗?基本用不到HttpCookieCollection与CookieCollection。
办理办法
间接上代码:
varrequest=WebRequest.Create("http://ws.cnblogs.com/user/hasblog")asHttpWebRequest;request.Headers.Add("Cookie",Request.Headers["Cookie"]);using(varresponse=request.GetResponse()asHttpWebResponse){}
HttpCookieCollectiontoCookieCollection的最复杂办法就是既不必HttpCookieCollection,也不必CookieCollection。
是不是实质都是API?有的好像不只是API那么简单的,有的也是一种框架就像MFC一样。有的还是一种思想(就是做软件的思想)(好像很深奥,其实我也不懂^_^) ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。 大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。 在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。 PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。 大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
页:
[1]