本章节简单介绍一下使用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. WPF上下滚动字幕

    XAML代码: <local:WorkSpaceContent x:Class="SunCreate.CombatPlatform.Client.NoticeMarquee" ...

  2. winform textbox控件keydown、keypress、keyup简单介绍

    1.执行先后顺序: keydown-->keypress-->keyup 2.按键相关操作: 1)keydown和keyup参数类型KeyEventArgs(提供了KeyCode)实现形式 ...

  3. Verify the Developer App certificate for your account is trusted on your device.

    1.报错内容 Could not launch "CH5203" Verify the Developer App certificate for your account is ...

  4. Linux基础命令(一)

    Linux语法命令 [选项] 参数注意:[]内容是对命令的扩张1.命令中单词之间空格隔开2.单行命令最多256个字符3.大小写区分 clear 清屏pwd 查看当前目录cd 切换目录    .表示当前 ...

  5. 2018-2019-2 20165219《网络对抗技术》Exp2 后门原理与实践

    2018-2019-2 20165219<网络对抗技术>Exp2 后门原理与实践 实验内容 使用netcat获取主机操作Shell,cron启动 使用Socat获取主机操作Shell, 任 ...

  6. “全栈2019”Java多线程第四章:设置和获取线程名称

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. 【文文殿下】Manache算法-学习笔记

    Manache算法 定义:是一个判断回文子串的算法,我们结合例题解释: 题目:给定一个长度为 n 的字符串 S,求其最长回文子串 一个字符串是回文的,当且仅当反转后的串与原串完全相等 分析:对于这个题 ...

  8. matlab中显示灰阶图像

    matlab的数据源文件中400张图片,每张图片是一个112*92的矩阵表示,而400张图片存储在一个cell数组ime中,显示第一张图片,指令是: colormap(gray) imagesc(im ...

  9. JAVA数组的遍历和取最值

    1.获取数组中的所有元素,会用到数组的遍历 数组的遍历,通常用for循环. public class ArrayDemo { public static void main(String[] args ...

  10. Windows 计划任务之消息提醒

    Windows 计划任务之消息提醒 你肯定也有这种需求.想做一个计划任务,却发现老式消息提醒已经被微软禁止了. 或者就是很单纯的希望给系统弹出一个消息框而并非CMD的echo命令. so...how ...