文章出處

 一、理解WEB API:提供基于RESTful架構的WEB服務,通過HTTP請求方法(GET, PUT, POST, DELETE)映射到服務器端相應的ACTION方法(CRUD)。

RESTful架構:

(1)每一個URI代表一種資源;
(2)客戶端和服務器之間,傳遞這種資源的某種表現層;
(3)客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現"表現層狀態轉化"。


HTTP 的四個主要方法 (GET, PUT, POST, DELETE) 按照下列方式映射為 CURD 操作:

GET 用于獲取 URI 資源的進行展示, GET 操作不應對服務端有任何影響; 

PUT 用于更新 URI 上的一個資源, 如果服務端允許, PUT 也可以用于新建一個資源;
POST 用于新建 資源, 服務端在指定的 URI 上創建一個新的對象, 將新資源的地址作為響應消息的一部分返回;
DELETE 用于刪除指定的 URI 資源。

二、WEB API特點:

1.CONTROL類繼承自ApiController抽象類;

2.注冊路由時一般無需指定ACTION節點,ACTION方法名稱一般都包含HTTP請求方法名名稱,路由系統通過HTTP請求方法自動尋找與之相應的ACTION方法并執行;

3.ACTION方法返回值一般為:JSON、XML或一般值對象

三、實現發送GET, PUT, POST, DELETE HTTP請求方法

1.通過JQUERY.AJAX方法指定TYPE類型來實現GET, PUT, POST, DELETE HTTP請求方法; 

2.直接訪問URL或將表單的METHOD方法設為GET,則可實現GET  HTTP請求方法;

3.將表單的METHOD方法設為POST,則可實現POST  HTTP請求方法;

4.PUT、DELETE除第一種方法外,只能通過先在服務端重寫HTTP請求方法(自定義HttpMessageHandler來實現),然后再在客戶端請求報文頭指定“X-HTTP-Method-Override

”值為PUT或DELETE來實現;具體實現方法詳見:如果調用ASP.NET Web API不能發送PUT/DELETE請求怎么辦? 

5.在注冊WEB API路由規則時指定ACTION節點;

 四、WEB API請求與服務端處理實現方法:

1.GET ALL方法:

客戶端:

 $("#Button1").click(function () {
                $.getJSON("@Url.Content("~/api/values")", function (data) {
                    var rs = "";
                    $.each(data, function () {
                        rs += this + ",";
                    })
                    alert(data);
                    showResult(rs);
                })
    });

服務器端:

        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

2.GET ONE方法:

客戶端:

            $("#Button2").click(function () {
                $.getJSON("@Url.Content("~/api/values/5")", function (data) {
                    alert(data);
                    showResult(data);
                })
            });

服務器端:

        // GET api/values/5
        public string Get(int id)
        {
            return "value is " + id.ToString();
        }

3.POST CREATE方法:(注意以下客戶端中的第幾種方法就對應服務器端的第幾種方法)

客戶端:

//第一種:
$("#Button1").click(function () {
                $.post("@Url.Content("~/api/values")", {name:'zwj',age:29},function (data) {
                    alert(data);
                    showResult(data);
                })
            });

//第二種:
 $("#Button3").click(function () {
                $.ajax("@Url.Content("~/api/values/1")", {
                    type:'post',
                    data:JSON.stringify({ name: 'zwj', age: 29 }),
                    contentType: 'application/json',
                    //dataType: 'json',
                    success: function (result, status, xhr) {
                        alert(result);
                        showResult(result);
                    }
                })
            });

服務器端:

//第一種方法:        
public string Post()
        {
            string s = "";
            HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];//獲取傳統context     
            HttpRequestBase request = context.Request;//定義傳統request對象

            for (int i = 0; i < request.Form.Keys.Count; i++)
            {
                s += string.Format("{0}={1}<br/>", request.Form.Keys[i], request.Form[i]);
            }
                return "Post values:" + s;
        }

//第二種方法:
        public string Post([FromBody]Person p)
        {
            return string.Format("Put values:name:{0},age:{1}" + p.Name,p.Age);
        }

4.PUT UPDATE方法:

 客戶端方法與POST方法相同,只是TYPE指定為:PUT;

 服務器端與POST方法相同;

5.DELETE 方法:

 客戶端方法與GET方法相同,只是TYPE指定為:DELETE;

 服務器端與GET方法相同;

也參見這篇文章:ASP.NET MVC學習系列(二)-WebAPI請求 


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()