WebApi有一段时间没用了,这几天用webapi做了一个接口供第三方调用,又重新折腾了下,做个笔记记录下心得,防止遗忘。
1、webapi使用的RESTful风格的传参方式,其实就是充分利用HTTP请求的格式来完成参数的传递。HTTP请求除了常用的get、post请求方式外,还有put、patch、delete请求方式。
2、后台对应的限制传参特性标签有[HttpGet]、[HttpPost]、[HttpPut]、[HttpPatch]、[HttpDelete]。
3、在给方法起名字的时候,方法名称前面最好加上对应的请求方式,比如Get***、Post***、Put***、Delete***。这样即使不使用特性标签,请求也能根据webapi的路由机制自动匹配对应的方法。
4、HttpPatch在webapi中是部分更新的意思,但要注意,由于MVC的模型绑定功能,在进行部分传参的时候,会把未进行需要传参的参数重装为null。例如:只修改Name,则使用HttpPatch的时候,会把Email的值改成null。所以,在使用HttpPatch的时候,这一点需要特别注意。
5、如果不想使用[FromBody]这样的形式传参,可以使用dynamic定义参数。在这样进行操作时候,前端传递的参数必须是json的形式,而且要添加contentType:'application/json'参数。具体使用方式请参考put传参的代码。
View:
1 <html> 2 <head> 3 <meta name="viewport" content="width=device-width" /> 4 <title>Index</title> 5 <script src="~/Scripts/jquery-1.10.2.min.js"></script> 6 <script> 7 $(function () { 8 $('#btn_get').click(function () { 9 $.ajax({ 10 url: '/api/WebApiDemo', 11 type: 'get', 12 data: { Id: 1, Name: '卡卡西', Email: 'kkx@163.com' }, 13 success: function (data) { 14 alert('get请求'); 15 } 16 }); 17 }); 18 19 $('#btn_post').click(function () { 20 $.ajax({ 21 url: '/api/WebApiDemo', 22 type: 'post', 23 data: { Id: 1, Name: '卡卡西', Email: 'kkx@163.com' }, 24 success: function (data) { 25 alert('post请求'); 26 } 27 }); 28 }); 29 30 $('#btn_put').click(function () { 31 $.ajax({ 32 url: '/api/WebApiDemo', 33 type: 'put', 34 contentType: 'application/json', 35 data: JSON.stringify({ Id: 1, Name: '卡卡西', Email: 'kkx@163.com' }), 36 success: function (data) { 37 alert('put请求'); 38 } 39 }); 40 }); 41 $('#btn_delete').click(function () { 42 $.ajax({ 43 url: '/api/WebApiDemo', 44 type: 'delete', 45 data: { Id: 1, Name: '卡卡西', Email: 'kkx@163.com' }, 46 success: function (data) { 47 alert('delete请求'); 48 } 49 }); 50 }) 51 52 }); 53 </script> 54 </head> 55 <body> 56 <div> 57 <input type="button" id="btn_get" value="Get查询请求" /> 58 <input type="button" id="btn_post" value="Post提交数据" /> 59 <input type="button" id="btn_put" value="Put修改数据" /> 60 <input type="button" id="btn_delete" value="Delete删除数据" /> 61 </div> 62 </body> 63 </html>
Controller:
1 [HttpGet] 2 public string GetDemo([FromUri] Person person) 3 { 4 return "ok"; 5 } 6 [HttpPost] 7 public string PostDemo([FromBody] Person person) 8 { 9 return "ok"; 10 } 11 [HttpPut] 12 public bool PutDemo(dynamic obj) 13 { 14 return true; 15 } 16 17 [HttpDelete] 18 public bool DeleteDemo([FromBody] Person person) 19 { 20 return true; 21 }
运行截图:
Get传参:
Post传参:
Put传参:
Delete传参: