標籤:style blog http color 使用 os io ar
一星期前公司用webapi處理一些事情,自己總結一下用法。
1.建立一個空的webapi會預設有一下幾個方法。
public class ValueController : ApiController { // GET api/value public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/value/5 public string Get(int id) { return "value"; } // POST api/value public void Post([FromBody]string value) { } // PUT api/value/5 public void Put(int id, [FromBody]string value) { } // DELETE api/value/5 public void Delete(int id) { } }
第一個IEnumerable<string> Get()
$.ajax({ url: "/api/value", type: "get", success: function (data) { alert(data); } });
第二個 string Get(int id)
$.ajax({ url: "/api/value/1", type: "get", success: function (data) { alert(data); } });
第三個 void Post([FromBody]string value) ,調用的時候比較特殊,我在data前面的索引值給空的時候才能把值傳輸到後台去。
$.ajax({ url: "/api/value", type: "post", data: { ‘‘: "test" }, success: function (data) { //alert(data); } });
或者改造後台接收方法。用實體來接收值,可以接收到。
public class PostModel { public string value { get; set; } } public string Post([FromBody]PostModel value) { return "ok"; }
$.ajax({ url: "/api/value", type: "post", data: { ‘value‘: "test" }, success: function (data) { //alert(data); } });
第四個 string Put(int id, [FromBody]PostModel value) 調用的時候,id必須包含在路徑中,才能擷取到。放在接收的實體中也是沒用的。
$.ajax({ url: "/api/value/1", type: "Put", data: { ‘value‘: "test" }, success: function (data) { //alert(data); } });
第五個 string Delete(int id) 調用跟第一個唯一的區別需要標明type:“Delete”
這是預設的幾種使用方法,但是自己使用的時候感覺約束蠻多。然後我把它們全刪了。
用法上不規範,但是用起來感覺比較舒服,感覺代碼還是怎麼寫起來舒服怎麼來吧,自己在api路由這裡加了一項{action}這樣用起來看著跟mvc區別不大。
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
代碼就可以這樣寫了。
public class ValueController : ApiController { public List<string> GetList() { return new List<String> { "value1", "value2" }; } public List<string> GetTestList() { return new List<String> { "value1", "value2" }; } } $.ajax({ url: "/api/value/GetTestList", type:"post", success: function (data) { } });
對於webapi傳參數,預設的都是從路徑裡提取的也就是get方式的傳參。
public List<string> GetList(string id,string name) { return new List<String> { "value1", "value2" }; }
$.ajax({ url: "/api/value/GetList", type: "get",
data: { "id": "1", "name": "三" }, success: function (data) { } });
$.ajax({ url: "/api/value/GetList?id=1&name=三", type: "get", success: function (data) { } });
如果需要傳的字串參數很多,get方式會報錯,可以用post方式,這裡需要注意的是不能用get開頭,要麼它只認get提交
public class PostModel { public string value { get; set; } public string id{ get; set; } } public List<string> List([FromBody]PostModel value) { return new List<String> { "value1", "value2" }; }
$.ajax({ url: "/api/value/List", type: "post", data: { "id": "1", "value": "01234567890123456789012345678901234567890123456789" }, success: function (data) { } });