一、理解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請求
文章列表