zoukankan      html  css  js  c++  java
  • 初始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的具体实现,目前我也是刚接触,我们后面讨论,

  • 相关阅读:
    ABAP的HTTP_GET和Linux的curl
    SAP CRM点了附件的超链接后报错的处理方式
    一个JSON字符串和文件处理的命令行神器jq,windows和linux都可用
    如何在Ubuntu里安装Helm
    如何实现Windows宿主系统和虚拟机ubuntu系统文件互相访问
    如何安装Virtual Box的VBox Guest Additions扩展程序
    最简单的教程:在Ubuntu操作系统里安装Docker
    在ubuntun虚拟机里安装goLang语言编程环境
    hi35183e增加exfat文件系统的支持
    可以返回执行结果的system函数加强版本
  • 原文地址:https://www.cnblogs.com/dazhuangtage/p/5344422.html
Copyright © 2011-2022 走看看