ASP.NET MVC4 Web 编程第七章
asp.net web api
随着web应用客户端ui ajax请求数量的增长,asp.net mvc基于jsonResult的控制器操作将无法满足高级ajax前端的需求,如果真的出现这种情况,就应该好好寻找一种更简单,有没得方法来处理ajax请求,现在是开始使用web api。
asp.net web api框架同时使用leweb标准规范,比如http,json和xml,以及一系列构建rest数据服务的参考原则,asp,net web api与asp.net mvc很象,都使用了一些相同的核心概念,比如路由,控制器以及控制器操作结果,但他是用这些核心概念是为了支持不同的场景:哪些需要使用数据服务,而非html标签的场景。
本章首先会详细介绍asp.net web api框架,并演示如何创建asp,net web api服务,然后介绍如何使用ajax调用服务。
构建Data Service
添加asp.net web API控制器与添加普通的控制器一样,下面几节会介绍如何向EBuy网站添加Web API控制器。
在开始之前需要一个文件夹用来存放web api控制器的源代码文件,当然,web api控制器代码可以放在任何文件里,可根据个人的编程习惯而定,比如,偷人喜欢在网站更目录创建一个api文件夹,当然也可以把它存放在控制器文件夹里,只要没有任何命名冲突,asp.net都会自动区分它们。
要添加性的web api控制器,只需要用右键点击要保存的文件夹(这里是api),然后选择“控制器”即可,弹出的对话框和添加普通的控制器对话框一样,如图7-1所示,只是在这里要选择“带有空的read/write操作的api控制器模板”,而不是普通的asp。net mvc 控制器模板,开始的时候,需要输入控制器的名字,例如auctionscontroller。cs设置完成以后,点击添加按钮就可以添加webapi控制器了,了7-1所示为新的webapi控制器代码。
public class AuctionDatacontroller:apicontroller{
public I额num二ableM《stringget(){returnnewstring{“value1”,“value2”};}
public string Get(int id){return "value";}
public void Post(string value){}
public void Put(int id,string value){}
public void Delete(intid){}
注册web api路由
在使用这个控制器之前,必须在asp.net路由里注册它,否则无法接收请求消息。
既然是基于asp.net mvc框架的,那么asp.net web api请求消息路由自然也是基于url的。
因此它的注册过程与普通的控制器路由注册过程一样,唯一的区别就是web api使用的是RouteTable.MapHttpRoute()扩展方法,而不是RouteTable.MapRoute()。
这是因为web api框架是使用“惯例优先原则”来查找正确的控制器操作方法。
我们不需要在url路径里使用api字段,可以是用任意合法的字符串作为路由,只要不和其他的路由冲突即可。
mvc路由配置规则使用与web api数据服务,但路由模式不要过于模糊或者过于细致
依赖惯例优先原则
与asp.net mvc 一样,asp.net web API也大量使用了惯例优先原则以减轻繁重的开发工作,例如,apicontroller依赖名称来关联不同的http操作,而不是使用httppost。attribute来标记不同的操作方法(asp.net mvc操作标记睡醒来控制请求方式映射的)。
使用这些惯例很容易执行CRUD操作(create,read,update,DELETE).标准的http动词对应的cruo操作是:
调用asp.net web api数据服务非常简单,例如下面的代码展示了如何使用jquery的S,getjson(方法来发送请求,地址时、apio.auction,这个服务放回交易书籍对象auction的)集合,格式是json。
重写惯例
折柳重要得意昂想是 ,控制器木ing黁个工艺坊只是用与那些名字宝把你尊哪些名字包含百尊http动词(create,read,update,delete)的控制器操作方法,如果想使用别的名称并且想调用web api功能,那该怎么办呢》那就使用
accpetverbsattribute标记属性或者httpgetattribute和http,和http、
postattribute属性直接标记到web api控制器上,这与标记其他的asp。net mvc控制器操作方法一样,下面的代码夯实了这些表技术性的使用过程
这个例子没有使用Rest管理Get,而是使用了自定义方法名称FindAuction。为了实现Get请求,我盟周期findAuction操作商标机HttpGetATTRIBUTE属性。
构住API
现在再来看一下之前创建的webapi控制器的设置。它可以执行CRUD操作。
为了访问Ebuy数据库,AuctionsDataController:ApiController
默认情况下,web api控制器需要默认构造参数(空参数),应为要传递IRepository给控制器,所以启动应用程序需要初始化自定义依赖解析器: