天天看點

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

/api/contact /id

GetListBySex

/api/contact?sex=sex

PostContact

POST

PutContact

PUT

/api/contact/id

DeleteContact

DELETE

http 四個主要的處理方法(get,put,post,delete)能夠用來處理比對增删改查操作:

Get 可以在服務端檢索比對URI比對的資源,不會對伺服器資料進行修改操作

Put 使用者修改URI指定的特定資源,如果服務端允許,Put 也可以使用者建立新的資源

Post 可以用于建立一個資源。服務端會為這個資源建立一個新的URI,并且将這個資源作為ResposeMessage 的一部分傳回

    Delete 使用者删除URI比對的資源 

2.  建立一個工程

(1)    

啟動VS2012,在已經安裝的模闆中選擇ASP.NET MVC4 Web 應用程式,單擊确定

ASP.NET MVC Web API 學習筆記---聯系人增删改查

      (2)    

在ASP.NET MVC 4 項目對話框中選擇 Web API,單擊确定

ASP.NET MVC 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();

        /// 根據ID查詢

        /// <param name="id"></param>

        Contact GetByID(int id);

        /// 添加

        /// <param name="contact"></param>

        Contact Add(Contact contact);

        /// 根據ID删除

        void Remove(int id);

        /// 修改

        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)

            Remove(contact.ID);

            return true;

    } 

(6)在Controllers檔案中添加一個APIController 

ASP.NET MVC Web API 學習筆記---聯系人增删改查

  3. 獲得一個資源

獲得所有聯系人

public IEnumerable<Contact> GetAllContact()

{

            return provider.GetListAll();

這個方法以Get開頭,用于比對Get方式請求,因為這個方法沒有參數,是以這個方法将比對/api/contact的請求

根據id獲得聯系人

public Contact GetContact(int id)

            Contact contact = provider.GetByID(id);

                throw new HttpResponseException(HttpStatusCode.NotFound);

這個方法也是以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);

為了處理post請求,我們需要聲明一個以post開頭的方法,方法中包含一個Contact類型的參數,這個參數從請求的body中序列化而來,是以用戶端調用的時候傳遞的要是一個序列化過的Contact對象,序列化的格式可以是json,xml。

建立資源響應狀态:

Response Code: 預設情況下,web api架構設定響應的狀态為200(OK), 基于Http/1.1 協定,在使用post建立一個資源contact的時候,伺服器響應狀态為201 (Created)

Location:  當建立一個新的資源之後,我們需要 Response Headers 路徑中包含一個URI。Web API架構将這個邊的非常簡單,看如下代碼:

public HttpResponseMessage PostContact(Contact 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)

方式是以Put開頭,當請求Mehtod 為Put,這個請求将比對這個方法,方法中包含了兩個參數,這兩個參數來自URI請求參數和Request Body 中 

6. 删除一個資源

public void DeleteContact(int id)

            provider.Remove(id);

            throw new HttpResponseException(HttpStatusCode.NoContent);

     删除基本和上面都一樣了,隻是請求method 不一樣而已,這裡不再累述

  用戶端調用參考上一章說明代碼

相關參考文章連結

<a href="http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html">ASP.NET MVC Web API 學習筆記---第一個Web API程式</a>

繼續閱讀