初始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:"[email protected]"},
                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: "[email protected]" },
            });
        }

        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="[email protected]"},
              new User{ UserId=2,UserName="小壮", Age=10, Emali="[email protected]"},
              new User{ UserId=3,UserName="壮壮", Age=20, Emali="[email protected]"}
        };
        // 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的具体实现,目前我也是刚接触,我们后面讨论,

时间: 2024-08-26 12:11:37

初始WebApi 利用WebApi实现基础的CRUD的相关文章

利用WebApi获取手机号码归属地

前述: 在WebApi中,涉及到一个重要的类,HttpWebRequest. 学习link:httpwebrequest详解 示例演示: 代码示例: 1.前端代码: 1 @{ 2 ViewBag.Title = "Index"; 3 Layout = null; 4 } 5 @*<script src="~/Views/js/jquery-1.7.1.js"></script>*@ 6 @*<script src="~/Vie

【SSH三大框架】Hibernate基础第五篇:利用Hibernate完成简单的CRUD操作

这里利用Hibernate操作数据库完成简单的CRUD操作. 首先,我们需要先写一个javabean: package cn.itcast.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id

【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作

这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先.我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id

Hibernate系列(五):利用Hibernate完成简单的CRUD操作

这里利用Hibernate操作数据库完成简单的CRUD操作. 首先,我们需要先写一个javabean: package cn.itcast.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id

hibernate基础的CRUD的操作

保存记录 session.save(customer); 根据主键进行查询 Customer customer = (Customer)session.get(Customer.class ,1); Customer customer = (Customer)session.load(Customer.class,1); ***** get 和load的区别:(面试题) 1.发送SQL的时机: load这个方法采用了一个技术.lazy延迟加载(懒加载).真正使用这个对象的数据的时候.(对象的数据

使用Spring-data-redis操作Redis的Sentinel

介绍 Spring-Data-Redis项目(简称SDR) 是对Redis的Key-Value数据存储操作提供了更高层次的抽象,提供了一个对几种主要的redis的Java客户端(例 如:jedis,jredis,jdbc-redis等)的抽象,使开发中可以几乎完全屏蔽具体使用客户端的影响,使业务代码保持较强的稳定性. Spring-Data-Redis提供了一个基础的泛型RedisTemplate供开发者快速的利用代码完成基础的crud工作.而StringRedisTemplate则提供了最常用

利用委托与Lambada创建和调用webapi接口(含源码)

前言 前不久有对此做过一次总结.但是不够详细,今天整理重发一次. 现在项目中用的是webapi,其中有以下问题:    1.接口随着开发的增多逐渐增加相当庞大. 2.接口调用时不好管理. 以上是主要问题,对此就衍生了一个想法: 如果每一个接口都一个配置文件来管理,每个配置文件能清晰表示处理接口文件,地址,参数,返回值,那么通过这个配置文件,就能很好的管理起来我们所有的webapi接口不是吗? 有了这个思路之后就有了以下的实现: 1.具体实现: public void Build_Apis() {

ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver

Message WebAPI作为通信架构必定包含包含请求与响应两个方法上的报文,在WebAPI它们分别是HttpRequestMessage,HttpResponseMessage.对于HttpResponseMessage之前在WebAPI返回结果中有应用. HttpRequestMessage 请求报文包含请求地址(RequestUri),请求方法(Method),头信息(Headers),报文信息(Content)以及Http版本(Versions) public class HttpRe

MVC WebApi 用户验证 (2)

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2) 前言: 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC WebApi 用户验证 (1) 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访问接口,管理接