天天看点

ASP.NET for WebApi

WebApi,听说过吧?呵呵。

感觉比WebService,WCF要强。尤其是那个啥WCF,啥鬼东西,真难懂。真难搞。真难用。

说比WebService要强,是因为不用在本地先生成个代理。而且XML也显得过于庞大。

用ASP.NET 编写 WebApi 的话,跟MVC差不多。生成的项目也有控制器,视图之类。只不过,其控制器继承的是ApiController。

还有一个不同的是,是不用写action的,只有controller。当然,你硬是要写也可以。但根据RESTful原则,WebApi提供的API方法名称应该纯粹是名词,而没有动词,系统根据请求方式来判断请求者意图,并执行相应操作。什么意思呢?

比如一个API 地址为

相应的方法为

当请求方式为GET时,执行的是方法Get(),Post时,执行的是方法Post()。API地址就一个:

108是ID值。

而不必写成下面那么傻:

当然,RESTful原则是这么推荐,但现实往往比较骨感。因为许多网络环境并不支持PUT和DELETE的请求方式,只支持GET和POST。怪不得我调试的时候,GET和POST都可以,到了PUT和DELETE,都报405错误:方法不被允许。错误代码为4开头,说明是浏览器不支持。

幸而看了蒋金楠博客。解决方案如下:

在api项目的global.asax.cs里调用这个类:

这样,请求过来时,读取这些额外设置的报头,系统就能知道请求者的意图了。

前端调用方式如下:

服务器端请求也可以,看俺的单元测试代码:

参考文章:

如果调用ASP.NET Web API不能发送PUT/DELETE请求怎么办?