本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查。
目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的。
下面我们通过创建一个简单的Web API来管理联系人
说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟

1.       Web API中包含的方法

Action

HTTP method

Relative URI

GetAllContact

GET

/api/contact

GetContact

GET

/api/contact /id

GetListBySex

GET

/api/contact?sex=sex

PostContact

POST

/api/contact

PutContact

PUT

/api/contact/id

DeleteContact

DELETE

/api/contact/id

http 四个主要的处理方法(get,put,post,delete)能够用来处理匹配增删改查操作:

Get 可以在服务端检索匹配URI匹配的资源,不会对服务器数据进行修改操作

Put 用户修改URI指定的特定资源,如果服务端允许,Put 也可以用户创建新的资源

Post 可以用于创建一个资源。服务端会为这个资源创建一个新的URI,并且将这个资源作为ResposeMessage 的一部分返回

Delete 用户删除URI匹配的资源

2.  创建一个工程

启动VS2012,在已经安装的模板中选择ASP.NET MVC4 Web 应用程序,单击确定

在ASP.NET MVC 4 项目对话框中选择 Web API,单击确定

(3) 添加一个Model,工程选择Models文件夹右键添加一个实体类,代码如下

public class Contact
    {
        public int ID { get; set; }

public string Name { get; set; }

public string Sex { get; set; }

public DateTime Birthday { get; set; }

public int Age { get; set; }

}

(4) 添加一个数据操作接口

public interface IContactRep
    {
        /// <summary>
        /// 查询所有
        /// </summary>
        /// <returns></returns>
        IEnumerable<Contact> GetListAll();

/// <summary>
        /// 根据ID查询
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Contact GetByID(int id);

/// <summary>
        /// 添加
        /// </summary>
        /// <param name="contact"></param>
        /// <returns></returns>
        Contact Add(Contact contact);

/// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        void Remove(int id);

/// <summary>
        /// 修改
        /// </summary>
        /// <param name="contact"></param>
        /// <returns></returns>
        bool Update(Contact contact);

}

(5)  添加数据操作接口实现类

public class ContactRep : IContactRep
    {
        private Log.Log log = Log.Log.Instance(typeof(ContactRep));
        private List<Contact> list = new List<Contact>();
        public ContactRep()
        {
            log.Info("执行构造方法");
            list.Add(new Contact() { ID = 1, Age = 23, Birthday = Convert.ToDateTime("1977-05-30"), Name = "情缘", Sex = "男" });
            list.Add(new Contact() { ID = 2, Age = 55, Birthday = Convert.ToDateTime("1937-05-30"), Name = "令狐冲", Sex = "男" });
            list.Add(new Contact() { ID = 3, Age = 12, Birthday = Convert.ToDateTime("1987-05-30"), Name = "郭靖", Sex = "男" });
            list.Add(new Contact() { ID = 4, Age = 18, Birthday = Convert.ToDateTime("1997-05-30"), Name = "黄蓉", Sex = "女" });
        }

public IEnumerable<Contact> GetListAll()
        {
            return list;
        }

public Contact GetByID(int id)
        {
            return list.Find(item => item.ID == id);
        }

public Contact Add(Contact contact)
        {
            if (contact == null)
            {
                throw new NullReferenceException("空引用异常");
            }
            int maxid = list.Max(item => item.ID);
            contact.ID = maxid + 1;
            list.Add(contact);
            return contact;
        }

public void Remove(int id)
        {
            list.RemoveAll(item=>item.ID==id);
        }

public bool Update(Contact contact)
        {
            if (contact == null)
            {
                throw new NullReferenceException("空引用异常");
            }
            Remove(contact.ID);
            list.Add(contact);
            return true;
        }

}

(6)在Controllers文件中添加一个APIController

3. 获得一个资源

Action

HTTP method

Relative URI

GetAllContact

GET

/api/contact

GetContact

GET

/api/contact/id

GetListBySex

GET

/api/contact?sex=sex

获得所有联系人

public IEnumerable<Contact> GetAllContact()
{
            return provider.GetListAll();

}

这个方法以Get开头,用于匹配Get方式请求,因为这个方法没有参数,所以这个方法将匹配/api/contact的请求

根据id获得联系人

public Contact GetContact(int id)
{
            Contact contact = provider.GetByID(id);
            if (contact == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return contact;

}

这个方法也是以Get方式开头,而这个方法包含一个id参数,这个方法会匹配/api/contact/id
的请求,而请求中的参数id会自动转换为int类型

如果没有找到相应id的联系人,则会抛出一个HttpResponseMessage的异常,这个异常是指向的404异常,请求资源不存在。

根据性别获得资源

public IEnumerable<Contact> GetListBySex(string sex)
{
            return provider.GetListAll().Where(item => item.Sex == sex);

}

如果一个请求中包含了一个查询的参数,web
api 将尝试匹配/api/contact?sex=sex

ASP.NET MVC Web API 学习笔记---联系人增删改查的更多相关文章

  1. 【转载】ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系 ...

  2. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  3. 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  4. ASP.NET MVC Web API 学习笔记---Web API概述及程序示例

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  5. ASP.NET MVC Web API 学习笔记---第一个Web API程序【转】

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html 1. Web API简单说明 近来很多大型的平台都公开了Web API. ...

  6. ASP.NET MVC Web API 学习笔记---第一个Web API程序---近来很多大型的平台都公开了Web API

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  7. ASP.NET Web API基于OData的增删改查,以及处理实体间关系

    本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { ...

  8. [转]ASP.NET Web API基于OData的增删改查,以及处理实体间关系

    本文转自:http://www.cnblogs.com/darrenji/p/4926334.html 本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先 ...

  9. asp.net mvc 三层加EF 登录注册 增删改查

    首先打开vs软件新建项目创建web中的mvc项目再右击解决方案创建类库项目分别创建DAL层和BLL层再把DAL层和BLL层的类重命名在mvc项目中的Models文件夹创建model类在DAL创建ADO ...

随机推荐

  1. mdadm 软RAID

    mdadm是linux下用于创建和管理软件RAID的命令,是一个模式化命令.但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的自身缺陷(不能用作启动分区.使用C ...

  2. airport 抓包

    链接airport命令: ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources ...

  3. 10-11Linux用户管理规则及用户管理函数

    用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage 组管理: groupadd, groupdel, grou ...

  4. ASP.NET Core学习总结(3)

    我们重点来看看这个InvokeInnerFilterAsync. protected override async Task InvokeInnerFilterAsync() { var next = ...

  5. MVC-controller随笔

    初识MVC-controller随笔 之前用的一些其他框架,也没有系统性的学习MVC框架.最近才开始接触,给大家简单的分享一下经验. 1    MVC的核心就是Controller(控制器),它负责处 ...

  6. django系列2--下载安装、项目创建、配置、启动

    Django下载与安装 一.使用pip: 1.下载: django的官网下载页:https://www.djangoproject.com/download/ 1.使用pip安装, 在cmd命令行中输 ...

  7. Gogland使用 - 非常简单查看Go语言源代码全貌!

    Go语言也支持面向对象开发,不过和以往我们所使用的面向对象开发还是有不同,Go语言主张组合方式形成类的概念,在Go语言中,结构起到很大作用,如果用结构组合字段和方法,那么单纯在源代码中看,真的是费时费 ...

  8. linux中使用unzip命令中文乱码解决办法

    今天在使用unzip进行解压缩文件时,发现解压出的文件中文乱码,最后使用如下命令解决: unzip -O CP936 xxx.zip 特此记录一下.

  9. Linux Kill 无法关闭进程

    Kill -signal Process# signal 表示kill命令给进程发送的信号 Kill命令实际上执行的动作,是给进程发送信号,常用: INT 2 这个就是你在bash下面用Ctrl+C ...

  10. 【文文殿下】[51nod1469] 淋漓尽致子串

    SAM的经典应用 一个状态的SIze==1绝对不合法. 一个状态在parent树上有一个Size>1的后继绝对不合法(前面可以再补字符) 一个状态可以转移到Size>1的节点绝对不合法,因 ...