仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 768|回复: 11
打印 上一主题 下一主题

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

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:16:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有专家说: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中增加以下代码:
  1. protectedvoidApplication_Start(objectsender,EventArgse){RouteTable.Routes.MapHttpRoute("WebApi","api/{controller}/{action}/{id}",new{id=RouteParameter.Optional});}
复制代码
4.增加Controllers文件夹,在个中增加类文件DemoController.cs,并让DemoController承继自ApiController。代码以下:
  1. namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}
复制代码
5.增加ViewModels文件夹,在个中增加Site.cs,并界说Site。

  1. namespaceCNBlogsWebApiDemo.ViewModels{publicclassSite{publicintSiteId{get;set;}publicstringTitle{get;set;}publicstringUri{get;set;}}}
复制代码


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

  1. 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:

  1. namespaceWebApiClientTest{publicclassWebApiClientTest{[Fact]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的感到,代码以下:
  1. varrequestJson=JsonConvert.SerializeObject(new{startId=1,itemcount=3});
复制代码
  代码的运转了局:{"startId":1,"itemcount":3}
  然后用System.Net.Http.StringContent把它打个包:
  1. HttpContenthttpContent=newStringContent(requestJson);
复制代码
  然后设置一下ContentType:
  1. httpContent.Headers.ContentType=newMediaTypeHeaderValue("application/json");
复制代码
4.4经由过程HttpPost挪用WebAPI失掉前往了局
  HttpClient闪亮退场,挪用它的PostAsync()办法轻松弄定:
  1. varhttpClient=newHttpClient();varresponseJson=httpClient.PostAsync("http://localhost:9000/api/demo/sitelist",httpContent).Result.Content.ReadAsStringAsync().Result;
复制代码
  看一下responseJson的了局:
  1. [{"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又退场:
  1. namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}0
复制代码
  展现一下前往了局:
  代码
  1. namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}1
复制代码
  了局  
  1. namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}2
复制代码
4.6WebApi_SiteList_Test()完全完成代码

  1. namespaceCNBlogsWebApiDemo.Controllers{publicclassDemoController:ApiController{}}3
复制代码


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

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-17 12:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表