您的位置首页百科问答

ASP.NET开发实例教程 -ASP.NET 4.5新特性WebAPI

ASP.NET开发实例教程 -ASP.NET 4.5新特性WebAPI

的有关信息介绍如下:

ASP.NET开发实例教程 -ASP.NET 4.5新特性WebAPI

ASP.NET开发实例教程实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通

在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models、Views、Controllers等文件夹和Global.asax文件。Views对于WebAPI来说没有太大的用途,Models中的Model主要用于保存Service和Client交互的对象,这些对象默认情况下会被转换为Json格式的数据迚行传输,Controllers中的Controller对应于WebService来说是一个Resource,用于提供服务。和普通的MVC一样,Global.asax用于配置路由规则。

ASP.NET开发实例教程环境准备 建议使用VS2012以上版本创建WebAPI,如果是使用VS2010,需要安装VS2010 SP1升级包,MVC4升级包,打开VS2012创建如下:第一步:新建ASP.NET Web应用程序

第二步:建议WebAPI新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models,Views,Controllers等文件夹和Global.asax文件

(二)Models和WCF中的数据契约形成鲜明对比的是,MVC WebAPI中的Model就是简单的POCO,没有任何别的东西,如,你可以创建如下的Modelpublic class UserModel{public int Id { get; set; }public string UserName { get; set; }public string PassWord { get; set; }}

(三)ControllersMVC WebAPI中的Controllers和普通MVC的Controllers类似,不过不再继承于Controller,而改为继承API的ApiController,一个Controller可以包含多个Action,这些Action响应请求的方法与Global中配置的路由规则有关,在后面结束Global时统一说明

(四)Global默认情况下,模板自带了两个路由规则,分别对应于WebAPI和普通MVC的Web请求,默认的WebAPI路由规则如下1routes.MapHttpRoute(2 name: "DefaultApi",3 routeTemplate: "api/{controller}/{id}",4 defaults: new { id = RouteParameter.Optional }5 );可以看到,默认路由使用的固定的api作为Uri的先导,按照微软官方的说法,用于区分普通Web请求和WebService的请求路径:可以看到,默认的路由规则只指向了Controller,没有指向具体的Action,因为默认情况下,对于Controller中的Action的匹配是和Action的方法名相关联的:具体来说,如果使用上面的路由规则,对应下面的Controller:public class UserController : ApiController{publicList allModeList = new List() {new UserModel(){ Id=1,UserName="zhang", PassWord="123"},new UserModel(){ Id=2,UserName="lishi", PassWord="123456"},new UserModel(){ Id=3,UserName="wang", PassWord="1234567"}};//Getapi/User/public IEnumerable GetAll(){return allModeList;}//Get api/User/1public IEnumerable GetOne(int id) {return allModeList.FindAll((m) => { return m.Id == id; });}//POST api/User/public bool PostNew(UserModel user){try{allModeList.Add(user);return true;}catch {return false;}}//Delete api/User/public int DeleteAll(){return allModeList.RemoveAll((mode) => { return true; });}//Delete api/User/1public int DeleteOne(int id) {return allModeList.RemoveAll((m) => { return m.Id == id; });}//Put api/Userpublic int PutOne(int id, UserModel user){List upDataList = allModeList.FindAll((mode) => { return mode.Id == id; });foreach (var mode in upDataList){mode.PassWord = user.PassWord;mode.UserName = user.UserName;}return upDataList.Count;}} 则,会有下面的对应关系: URL HttpMethod 对应的Action名 /api/UserGETGetALL /api/User/1GET GetOne /api/UserPOSTPostNew /api/User/1DELETE DeleteOne /api/UserDELETE DeleteALL /api/UserPUT PutOne客户端JS调用 function getAll() {$.ajax({url: "api/User/",type: 'GET',success: function (data) {document.getElementById("modes").innerHTML = "";$.each(data, function (key, val) {var str = val.UserName + ': ' + val.PassWord;$('

  • ', { html: str }).appendTo($('#modes'));});}}).fail(function (xhr, textStatus, err) {alert('Error: ' + err);});   }function find() {$.ajax({url: "api/User/1" ,type: 'GET',success: function (data) {document.getElementById("modes").innerHTML = "";$.each(data, function (key, val) {var str = val.UserName + ': ' + val.PassWord;$('
  • ', { html: str }).appendTo($('#modes'));});}}).fail(function (xhr, textStatus, err) {alert('Error: ' + err);});}function add() {$.ajax({url: "api/User/",type: "POST",dataType: "json",data: { "Id":4,"UserName": "admin", "PassWord": "666666"},success: function (data) {getAll();}}).fail(function (xhr, textStatus, err) {alert('Error: ' + err);});}function removeUser() {$.ajax({url: "api/User/3",type: 'DELETE',success: function (data) {document.getElementById("modes").innerHTML = "";getAll();}}).fail(function (xhr, textStatus, err) {alert('Error: ' + err);});}function removeAll() {$.ajax({url: "api/User/",type: 'DELETE',success: function (data) {document.getElementById("modes").innerHTML = "";getAll();}}).fail(function (xhr, textStatus, err) {alert('Error: ' + err);});}function udpate() {$.ajax({url: "api/User/1",type: 'PUT',dataType: "json",data: { Id: 1, "UserName": "admin", "PassWord": "666666" },success: function (data) {document.getElementById("modes").innerHTML = "";getAll();}}).fail(function (xhr, textStatus, err) {alert('Error: ' + err);});}这样就实现了最基本的CRUD操作。

    此处贴不完,更多内容和涉及代码请查看:http://bbs.ibeifeng.com/read-htm-tid-66855.html

    再次强调Views对于WebAPI来说没有太大的用途,Models中的Model主要用于保存Service和Client交互的对象,这些对象默认情况下会被转换为Json格式的数据进行传输,Controllers中的Controller对应于WebService来说是一个Resource,用于提供服务。和普通的MVC一样,Global.asax用于配置路由规则

    注意:Model必须提供public的属性,用于json或xml反序列化时的赋值