|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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中增加以下代码:
- 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{[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的感到,代码以下:
- 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项目,先把服务跑起来,客户端才干享用到服务。
如果英语好,口才好,加上女孩子的优势说不定有机会进去做做别的工具) |
|