博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF Web API 轻松实现 REST
阅读量:6000 次
发布时间:2019-06-20

本文共 2463 字,大约阅读时间需要 8 分钟。

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

1. 创建 WCF 服务(ServiceContract)。

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

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

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

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

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

上面的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'.

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

6. 将 int 改为 string

IQueryable
GetRecentNews(string itemcount);

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

 

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

(如果不知道 WCF Web API 是何方神圣,请看演员介绍)

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

[ServiceContract] public class NewsRestService {
[WebGet(UriTemplate = "{itemcount}")] public IQueryable
GetRecentNews(int itemcount) { return newsList.AsQueryable(); } }

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))); }

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

(注2:如果出现“ASP.NET routing integration feature requires ASP.NET compatibility.”错误,请在web.config中加上<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>)

收工!只需两步就实现 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>)。

相关内容

英文:

中文:

转载于:https://www.cnblogs.com/dudu/archive/2011/10/27/wcf_web_api.html

你可能感兴趣的文章
Makefile 多目录自动编译
查看>>
学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中
查看>>
统一Matlab下不同子图的色标colorbar
查看>>
Linux 进程间通信(二) 管道
查看>>
Ajax保留浏览器历史的两种解决方案(Hash&Pjax)
查看>>
深入浅出JQuery (二) 选择器
查看>>
CI框架 -- 驱动器
查看>>
FastMQ V0.2.0 stable版发布
查看>>
对象复制
查看>>
Mongodb内嵌数组的完全匹配查询
查看>>
MyBatis学习笔记(四) 注解
查看>>
什么是数据仓库主题
查看>>
WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException
查看>>
移动硬盘文件或目录损坏且无法读取怎么解决
查看>>
在shell中使用sed命令替换/为\/
查看>>
JavaSe: 不要小看了 Serializable
查看>>
Node.js 抓取电影天堂新上电影节目单及ftp链接
查看>>
js课程 3-9 js内置对象定时器和超时器怎么使用
查看>>
linux popen函数
查看>>
[游戏开发]关于手游客户端网络带宽压力的一点思考
查看>>