初始WebApi 利用WebApi实现基础的CRUD

    微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService。它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下:

GET:生到数据列表(默认),或者得到一条实体数据

POST:添加服务端添加一条记录,记录实体为Form对象

PUT:添加或修改服务端的一条记录,记录实体的Form对象,记录主键以GET方式进行传输

DELETE:删除 服务端的一条记录

注意上面公开的API接口都是在XMLHttpRequest情况下调用的,当然你可以使用jquery的ajax组件来完成这个请求调用,它的代码更加面向对象,下面举例说明一下

这是页面的HTML代码部分,实现最基本的CRUD操作

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
</head>
<body>
    <fieldset>
        <a href="javascript:add()">添加(Add)</a>
        <a href="javascript:Put(4)">更新(Put)</a>
        <a href="javascript:Delete()">删除(Delete)</a>
        <a href="javascript:getAll()">获取所有</a>
    </fieldset>
    <script type="text/javascript">
        function getAll() {
            $.ajax({
                url: "/api/Values",
                type: "Get",
                success: function (data) {
                    alert(JSON.stringify(data));
                }
            });
        }
        function add() {
            $.ajax({
                url: "/api/Values",
                type: "Post",
                data: {"UserId":4,UserName:"壮老大",Age:99,Emali:"zhuanglaoda@qq.com"},
                success:function(data) {
                    alert(JSON.stringify(data));
                }
            });
        }
 
        function Put(id) {
            $.ajax({
                url: "/api/Values?id="+id,
                type: "put",
                data: { "UserId": 4, UserName: "壮老大(Update)", Age: 99, Emali: "zhuanglaoda@qq.com" },
            });
        }

        function Delete() {
            $.ajax({
                url: "/api/Values",
                type: "Delete",
                data: { "id": 4 },
            });
        }
    </script>
</body>
</html>

后台代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace WebApiDemo.Controllers
{
    public class ValuesController : ApiController
    {
        public static List<User> UserList = new List<User>
        {
              new User{ UserId=1,UserName="大壮", Age=1, Emali="dazhuang@qq.com"},
              new User{ UserId=2,UserName="小壮", Age=10, Emali="xiaozhuang@qq.com"},
              new User{ UserId=3,UserName="壮壮", Age=20, Emali="zhuangzhuang@qq.com"}
        };
        // GET api/values
        public IEnumerable<User> Get()
        {
            return UserList;
        }

        // GET api/values/5
        public User Get(int id)
        {
            return UserList.FirstOrDefault(c=>c.UserId==id);
        }

        // POST api/values
        public bool Post([FromBody]User user)
        {
            UserList.Add(user);
            return true;
        }

        // PUT api/values/5
        public bool Put(int id, [FromBody]User user)
        {
            var temp_user = UserList.FirstOrDefault(c => c.UserId == id);
            if (temp_user != null)
            {
                temp_user.UserName = user.UserName;
                temp_user.Age = user.Age;
                temp_user.Emali = user.Emali;
            }
            return true;
        }

        // DELETE api/values/5
        public bool Delete(int id)
        {
            UserList.Remove(UserList.FirstOrDefault(c=>c.UserId==id));
            return true;
        }

        public class User
        {
            public int UserId { get; set; }
            public string UserName { get; set; }
            public int Age { get; set; }
            public string Emali { get; set; }
        }
    }
}

值得注意的一点,如果网站地址是:127.0.0.1/ 如果API接口的控制器是values 默认路由规则的话127.0.0.1/values是可以访问的,但是要注意,由于所有的API控制器是集成了ApiController,所以默认的路由规则是不起作用的。

笔者也被坑了一会,后来看App_Start在WebApiConfig中看到注册了一个这样的方法

        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
            // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
            // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712//config.EnableQuerySupport();

            // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
            // 有关详细信息,请参阅: http://www.asp.net/web-api
            config.EnableSystemDiagnosticsTracing();
        }

大家懂了吧, 在API接口前面加api就可以访问了,或者像MVC路由那样在注册几个路由也是可以的。

对于WebApiConfig的具体实现,目前我也是刚接触,我们后面讨论,

posted @ 2016-04-01 11:44  大壮他哥  阅读(852)  评论(0编辑  收藏  举报