变相怪杰 发表于 2015-1-18 11:16:06

ASP.NET编程:不“复杂”的HttpClient仓酷云

在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。Web可以打下世界,最主要的元勋就是HTTP;HTTP可以立功立业,最主要的缘故原由就是它的复杂。
微软在.NETFramework4.5中为人人带来了System.Net.Http.HttpClient,既然叫HttpClient,我想应当投合了HTTP复杂的特征,应当会比HttpWebRequest更复杂。
在之前的博文“jQuery能做到,PHP能做到,C#也能做到”中也切实其实发明用HttpClient倡议HTTPPOST哀求并传送urlquerystring参数,比用HttpWebRequest更复杂。因而盘算把基于HttpWebRequest的完成改成基于HttpClient的完成。
基于HttpWebRequest的完成中有设置UserAgent的代码:

varwebRequest=WebRequest.Create(url)asHttpWebRequest;webRequest.UserAgent="CNBlogs";
原本觉得HttpClient也有一样的UserAgent属性,因而想如许写:

varhttpClient=newHttpClient();httpClient.UserAgent="CNBlogs";//毛病的代码
了局发明HttpClient基本没有UserAgent这个属性。
因而,找啊找,终究找到了一个UserAgent:

varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent
觉得就是它了,却发明这里的UserAgent是只读属性。
再一看它的范例是HttpHeaderValueCollection<ProductInfoHeaderValue>,能够Add,Add的参数范例是ProductInfoHeaderValue,因而newProductInfoHeaderValue,机关函数的参数范例是ProductHeaderValue,因而newProductHeaderValue。代码以下:

varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent.Add(newProductInfoHeaderValue(newProductHeaderValue("CNBlogs")));
运转代码一看,切实其实失掉了想要的UserAgent。顺藤摸瓜终究摸到了,但有些庞大。
换了根藤摸,摸到了一个略微复杂些的瓜,如许也能够:

varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent.Add(newProductInfoHeaderValue("CNBlogs",null));
依据实践需求,必要在UserAgent中设置邮件地点,因而代码改成:

varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent.Add(newProductInfoHeaderValue(newProductHeaderValue("contact@cnblogs.com")));
运转了局居然报错:
failed:System.FormatException:Theformatofvaluecontact@cnblogs.comisinvalid.
atSystem.Net.Http.Headers.HeaderUtilities.CheckValidToken(Stringvalue,StringparameterName)
atSystem.Net.Http.Headers.ProductHeaderValue..ctor(Stringname)而在HttpWebRequest中是能够的:

varwebRequest=WebRequest.Create(url)asHttpWebRequest;webRequest.UserAgent="contact@cnblogs.com";
摸了半天,本来摸到的是半生不熟的瓜。。。
算了,仍是乞助摸瓜妙手Google吧。。。找到了HowtouseHttpClienthandlers中的一行代码:

httpClient.DefaultRequestHeaders.Add("user-agent","...");
妙手一脱手,就知有无,改成这个代码就可以弄定:

varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.Add("UserAgent","contact@cnblogs.com");
这个应当是HtppClient中设置UserAgent最复杂的办法,HttpWebRequest的对应完成是:

varwebRequest=WebRequest.Create(url)asHttpWebRequest;webRequest.Headers.Add("UserAgent","contact@cnblogs.com");
弄定是弄定了,原觉得HttpClient会比HttpWebRequest更复杂。但是如今设置UserAgent这么复杂的操纵,利用HttpWebRequest信手拈来,只需输出“.u”,智能感知就可以找到;利用HttpClient反而有些贫苦,不但没有智能感知,并且要手动输出字符串"UserAgent"。
我想尽年夜多半人利用HttpClient设置UserAgent时,起首想到的是HttpClient.UserAgent。优异的计划应当是用户想到那里,它就呈现在那里。而不“复杂”的HttpClient却要和用户捉迷躲。
HttpClient与HttpWebRequest事实有甚么区分,为何要存心显得与HttpWebRequest纷歧样?
MSDN上是这么说:
Bydefault,HttpWebRequestwillbeusedtosendrequeststotheserver.

IfanappusingHttpClientandrelatedclassesintheSystem.Net.Httpnamespaceintendstodownloadlargeamountsofdata(50megabytesormore).
仅仅由于呼应哀求的数据量年夜,HttpClient就与HttpWebRequest不同云云年夜,这是站不住脚的来由。
厥后在HenriksBlog中找到如许一句话:
ThedefaultHttpClientisthesimplestwayinwhichyoucanstartsendingrequests.AsingleHttpClientcanbeusedtosendasmanyHTTPrequestsasyouwantconcurrentlysoinmanyscenariosyoucanjustcreateoneHttpClientandthenusethatforallyourrequests.
本来谜底在这里!HttpClient最不同凡响的中央是统一个HttpClient实例能够收回屡次哀求,每次哀求是能够是完整分歧的URL。而一个HttpWebRequest实例对应于一个Url的一次哀求。这才是HttpClient与HttpWebRequest的最年夜区分地点。
原本写这篇博客是想品评HttpClient,写的过程当中才发明本来是本人对HttpClient不敷懂得。可是仍然以品评扫尾,HttpClient计划得不敷复杂。
就安全性而言,net网页编程已经远远低于VB.NET,更无法与安全性著称的C#相比。

谁可相欹 发表于 2015-1-19 18:04:58

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。

冷月葬花魂 发表于 2015-1-24 15:18:35

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

灵魂腐蚀 发表于 2015-1-27 06:48:50

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

admin 发表于 2015-2-4 03:00:56

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。

因胸联盟 发表于 2015-2-5 11:52:24

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

爱飞 发表于 2015-2-7 10:06:23

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

简单生活 发表于 2015-2-21 16:49:42

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

只想知道 发表于 2015-3-6 12:34:47

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。

仓酷云 发表于 2015-3-7 01:34:33

能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。

变相怪杰 发表于 2015-3-14 00:33:50

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

海妖 发表于 2015-3-20 22:41:15

ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
页: [1]
查看完整版本: ASP.NET编程:不“复杂”的HttpClient仓酷云