WCF Web API轻松实现REST

网友投稿 339 2023-05-16

先体验一下,如果没有 WCF Web API,直接用 WCF 实现 REST 有多麻烦:

1. 创建 WCF 服务(ServiceContract)。

2. 创建 .svc 文件指向该 WCF 服务。

3. 在 web.config 中添加<service>/<endpoint>  配置,并将 binding 设置为 webHttpBinding,示例配置如下:

复制<services> <servicename="CNBlogs.OpenAPI.Service.NewsRestService"> <endpointbinding="webHttpBinding" contract="CNBlogs.OpenAPI.Service.INewsRestService" behaviorConfiguration="RESTFul"/> </service> </services> 1.2.3.4.5.6.7.

4. 在 web.config 中添加 <endpointBehaviors>/<behavior> 配置,并在其中添加<webHttp />,在第3步的配置中添加该behaviorConfiguration(比如上面代码中的behaviorConfiguration="RESTFul"),示例配置如下:

复制<endpointBehaviors> <behaviorname="RESTFul"> <webHttp/> </behavior> </endpointBehaviors> 1.2.3.4.5.

5. 在 OperationContract 方法上增加 WebInvoke 属性,示例代码如下:

复制[OperationContract]   [WebInvoke(Method = "GET",   UriTemplate = "News/Recent/{itemcount}",   ResponseFormat = WebMessageFormat.Xml)   ]           IQueryable<NewsItem> GetRecentNews(int itemcount);  1.2.3.4.5.6.

上面的5步已经够麻烦了。开始以为到此就可以收工了,哪知不运行不知道,一运行吓一跳:

复制Operation GetRecentNews in contract INewsRestService has a path variable named itemcount which does not have type string.     Variables for UriTemplate path segments must have type string.  1.2.

参数竟然不能用int类型,必须要用 string。只能望 WCF 心叹,不得不进入第6步。

6. 将 int 改为 string

 
复制IQueryable<NewsItem> GetRecentNews(string itemcount);  1.

这是纯 WCF 实现 REST 的表演节目,节目名称叫“ WCF 实现 REST 六步走”,表演得分6分。

接下来,我们看看 WCF Web API 的表演

(如果不知道 WCF Web API 是何方神圣,请看演员介绍http://wcf.codeplex.com/wikipage?title=WCF%20HTTP)

1. 在提供 REST 服务的方法上增加 [WebGet(UriTemplate = "")] 属性,示例代码如下:

复制[ServiceContract]   public class NewsRestService   {       [WebGet(UriTemplate = "{itemcount}")]       public IQueryable<NewsItem> GetRecentNews(int itemcount)       {            return newsList.AsQueryable();       }    1.2.3.4.5.6.7.8.9.

2. 在 Global.asax 的 Application_Start 中添加路由,示例代码如下:

复制protected void Application_Start(object sender, EventArgs e)   {       var config = new HttpConfiguration() ;       RouteTable.Routes.Add(new ServiceRoute("news/recent",           new HttpServiceHostFactory { Configuration = config },           typeof(NewsRestService)));   1.2.3.4.5.6.7.

注:需要通过 NuGet 添加对 WebApi.All 的引用。news/recent 就是 REST 访问网址。

收工!只需两步就实现 REST,WCF Web API 的表演得分2分。

2 : 6,WCF Web API 大获全胜!(分数少的怎么反而获胜?这是代码世界,不是现实世界,程序员说了算,谁的代码少,谁就获胜)

小结

WCF Web API 是 “First-class programming model for HTTP in WCF”,而 HTTP 是 Web 世界的通行证,Web API 可以让我们更轻松地畅游于 Web 编程世界。

实现 REST 只是 WCF Web API 小试牛刀,我们还可以不用修改任何服务端代码,只改变客户端请求的方式,就可以返回不现类型的数据。

比如:

1)将 HTTP Header 中的 Accept 改为 “application/json”,返回的就是 JSON 数据。

2)通过 Url 参数发起 OData 查询(比如“?$top=4&$orderby=Title” ),服务器收到请求后,会对返回结果进行 LINQ 查询(因此示例代码中的返回值类型是IQueryable<NewsItem>)。

原文:http://www.cnblogs.com/dudu/archive/2011/10/27/wcf_web_api.html

【编辑推荐】

百度地图API之如何制作公交导航 走进Windows线程同步API 谷歌拼音输入法扩展API开发指南 新浪微博API开发简介之用户授权(PHP基础篇) 百度地图API开发指南

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:教你如何构建简单Web API
下一篇:技术热点:RESTful API 最佳实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~