zoukankan      html  css  js  c++  java
  • 【转载】ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用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.  创建一个工程
     

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

     

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

     

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

    public class Contact
        {
            public int ID { getset; }

            public string Name { getset; }

            public string Sex { getset; }

            public DateTime Birthday { getset; }

            public int Age { getset; }

    }

    (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

    4. 创建一个资源

    客户端发送一个Post请求,会创建一个新的contact

    public Contact PostContact(Contact contact)
    {
                contact = provider.Add(contact);
                return contact;

    为了处理post请求,我们需要声明一个以post开头的方法,方法中包含一个Contact类型的参数,这个参数从请求的body中序列化而来,所以客户端调用的时候传递的要是一个序列化过的Contact对象,序列化的格式可以是jsonxml

     

    创建资源响应状态:

    Response Code 默认情况下,web api框架设置响应的状态为200(OK), 基于Http/1.1 协议,在使用post创建一个资源contact的时候,服务器响应状态为201 (Created)

    Location:  当创建一个新的资源之后,我们需要 Response Headers 路径中包含一个URIWeb API框架将这个边的非常简单,看如下代码:

    public HttpResponseMessage PostContact(Contact contact)
    {
                contact = provider.Add(contact);
                HttpResponseMessage response = Request.CreateResponse<Contact>(HttpStatusCode.Created, contact);
                string uri = Url.Link(""new { id = contact.ID });
                response.Headers.Location = new Uri(uri);
                return response;

    这个方法返回的是一个HttpResponseMessage 而不是一个contact对象,我们可以获得请求响应的详细信息,包括状态码以及响应头信息。

    使用CreateResponse可以创建一个HttpResonseMessage,并且会自动将Contact对象序列化写入响应Body中。

    5.       修改一个资源 

    public void PutContact(int id, Contact contact)
    {
                contact.ID = id;
                bool flag = provider.Update(contact);
                if (!flag)
                {
                    throw new HttpResponseException(HttpStatusCode.NotFound);
                }

    方式是以Put开头,当请求Mehtod Put,这个请求将匹配这个方法,方法中包含了两个参数,这两个参数来自URI请求参数和Request Body  

    6. 删除一个资源

    public void DeleteContact(int id)
    {
                provider.Remove(id);
                throw new HttpResponseException(HttpStatusCode.NoContent);

         删除基本和上面都一样了,只是请求method 不一样而已,这里不再累述

     客户端调用参考上一章说明代码

    代码下载 

    相关参考文章链接

     转自:http://www.cnblogs.com/qingyuan/archive/2012/10/16/2725378.html

  • 相关阅读:
    Key-Value Memory Network
    Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Clas
    Deep Memory Network在Aspect Based Sentiment方向上的应用
    Deep Memory Network 深度记忆网络
    Self Attention 自注意力机制
    Attention基本公式及其变种
    *端策略优化算法(PPO)
    Policy Gradient 算法
    一本通 农场派对
    A
  • 原文地址:https://www.cnblogs.com/hycms/p/3936134.html
Copyright © 2011-2022 走看看