愤怒的大鸟 发表于 2015-1-18 11:16:06

ASP.NET网站制作之HttpClient + ASP.NET Web API, WCF以外的另外一个挑选仓酷云

有专家说:net网页编程不是跨平台,net网页编程就是平台,这很好的定义了net网页编程的特点。有了net网页编程,你只需要等待net网页编程平台在新平台上移植。这还不错吧!只是,net网页编程不是一个平台,而是多个平台。你需要在这个net网页编程平台移植到另一个net网页编程平台。WCF的野心形成了它的复杂庞大,HTTP的纯真作育了它的复杂幽美。为了完成散布式Web使用,我们不能不将二者对付在一同——WCF服务以HTTP绑定宿主于IIS。
因而有了让人蒙头转向的设置、让人忧郁不已的调试,另有那ServiceContract,DataContract,EnumMember...另有另有,不要在using语句中挪用WCF服务...
因而常常自问:拿着牛刀削苹果有需要吗?空话,固然没有需要,生果刀在那里?
微软看着这么多人拿着牛刀削苹果,本人也看不下往了,因而,一种生果刀横空出生——ASP.NETWebAPI。
比来我们在实践开辟中有个中央用WCF太贫苦,就小试了一下生果刀,感到还不错。
上面用一个复杂的示例分享一下ASP.NETWebAPI生果刀的用法。
服务端ASP.NETWebAPI的完成
必要筹办的工具:VisualStudio2010,NuGet
1.新建一个空的ASP.NETWebApplication项目。

2.经由过程NuGet增加ASP.NETWebAPI的援用,在NuGet中搜刮时要用“AspNetWebApi”(用“ASP.NETWebAPI”是搜刮不到的),然后选择ASP.NETWebAPI(Beta)举行安装。

3.增加Global.asax,在Application_Start中注册WebAPI的路由,在Global.asax.cs中增加以下代码:

protectedvoidApplication_Start(objectsender,EventArgse){RouteTable.Routes.MapHttpRoute("WebApi","api/{controller}/{action}/{id}",new{id=RouteParameter.Optional});}
4.增加Controllers文件夹,在个中增加类文件DemoController.cs,并让DemoController承继自ApiController。代码以下:

namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}
5.增加ViewModels文件夹,在个中增加Site.cs,并界说Site。


namespaceCNBlogsWebApiDemo.ViewModels{publicclassSite{publicintSiteId{get;set;}publicstringTitle{get;set;}publicstringUri{get;set;}}}

6.给DemoController增加一个办法SiteList,并写上我们的示例代码。代码以下:


publicclassDemoController:ApiController{publicIList<Site>SiteList(intstartId,intitemcount){varsites=newList<Site>();sites.Add(newSite{SiteId=1,Title="test",Uri="www.cnblogs.cc"});sites.Add(newSite{SiteId=2,Title="博客园首页",Uri="www.ckuyun.com"});sites.Add(newSite{SiteId=3,Title="博问",Uri="q.cnblogs.com"});sites.Add(newSite{SiteId=4,Title="旧事",Uri="news.cnblogs.com"});sites.Add(newSite{SiteId=5,Title="雇用",Uri="job.cnblogs.com"});varresult=(fromSitesiteinsiteswheresite.SiteId>startIdselectsite).Take(itemcount).ToList();returnresult;}}

7.设置一下Web项目标启动设置SpecificPage与Specificport

8.Ctrl+F5运转项目,了局以下:

了局是我们希冀的,用扫瞄器间接能够检察WebAPI的运转了局,测试时会很便利。
好了,服务端WebAPI就这么轻松弄定了!
客户端经由过程HttpClient挪用服务端WebAPI
1.新建一个WebApiTest的类库项目。
2.在NuGet中增加System.Net.Http(HttpClient就在这里),Json.NET,xUnit.net。
3.增加类文件WebApiClientTest.cs,增加测试办法WebApi_SiteList_Test:


namespaceWebApiClientTest{publicclassWebApiClientTest{publicvoidWebApi_SiteList_Test(){}}}

4.WebApi_SiteList_Test()的代码完成
4.1起首,要断定三个工具:
  a)客户端挪用WebAPI的体例是HttpGet,还HttpPost,我们这里选用HttpPost;
  b)客户端挪用WebAPI时传送的参数格局,我们这里选用的是Json。
  c)WebAPI前往的数据格局,我们这里选用的也是Json(这也是之前增加Json.NET援用的缘故原由)。
4.2用到的类


[*]System.Net.Http.HttpClient
[*]System.Net.Http.httpContent
[*]System.Net.Http.StringContent
[*]System.Net.Http.Headers.MediaTypeHeaderValue
[*]Newtonsoft.Json.JsonConvert
4.3筹办必要传送给WebAPI的参数
  必要传送的两个参数是startId,itemcount,传送的格局是Json。这里可没有Javascript中的JSON.stringify(),但我们有Json.NET,再加上匿名范例,有点用js的感到,代码以下:

varrequestJson=JsonConvert.SerializeObject(new{startId=1,itemcount=3});
  代码的运转了局:{"startId":1,"itemcount":3}
  然后用System.Net.Http.StringContent把它打个包:

HttpContenthttpContent=newStringContent(requestJson);
  然后设置一下ContentType:

httpContent.Headers.ContentType=newMediaTypeHeaderValue("application/json");
4.4经由过程HttpPost挪用WebAPI失掉前往了局
  HttpClient闪亮退场,挪用它的PostAsync()办法轻松弄定:

varhttpClient=newHttpClient();varresponseJson=httpClient.PostAsync("http://localhost:9000/api/demo/sitelist",httpContent).Result.Content.ReadAsStringAsync().Result;
  看一下responseJson的了局:

[{"SiteId":2,"Title":"博客园首页","Uri":"www.ckuyun.com"},{"SiteId":3,"Title":"博问","Uri":"q.cnblogs.com"},{"SiteId":4,"Title":"旧事","Uri":"news.cnblogs.com"}]
  正宗的Json!你注重到没有,服务端WebAPI的代码未作任何修正,我们只是在HttpHeaders中将ContentType设置为了application/json,前往的就是Json格局的数据。而我们经由过程扫瞄器会见,失掉的仍是尺度的XML。这里就是ASP.NETWebAPI的魅力之一——一次完成,按需服务。
4.5将Json格局前往的了局反序列化为强范例
  Json.NET又退场:

namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}0
  展现一下前往了局:
  代码

namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}1
  了局  

namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}2
4.6WebApi_SiteList_Test()完全完成代码


namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}3

注:运转这里的代码之前,要先运转WebAPI项目,先把服务跑起来,客户端才干享用到服务。
如果英语好,口才好,加上女孩子的优势说不定有机会进去做做别的工具)

不帅 发表于 2015-1-20 18:58:49

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。

深爱那片海 发表于 2015-1-28 05:38:47

我的意思是.net好用,从功能上来说比JAVA强还是很明显的。

只想知道 发表于 2015-2-2 21:42:13

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!

金色的骷髅 发表于 2015-2-4 16:29:31

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

老尸 发表于 2015-2-7 23:34:31

逐步缩小出错代码段的范围,最终确定错误代码的位置。

灵魂腐蚀 发表于 2015-2-22 16:18:59

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

乐观 发表于 2015-2-27 04:12:15

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

仓酷云 发表于 2015-3-3 01:53:17

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

再见西城 发表于 2015-3-11 08:25:45

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

小魔女 发表于 2015-3-18 00:24:44

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

冷月葬花魂 发表于 2015-3-25 08:24:40

目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
页: [1]
查看完整版本: ASP.NET网站制作之HttpClient + ASP.NET Web API, WCF以外的另外一个挑选仓酷云