介绍:
WebAPI用来开发系统间接口的技术,基于HTTP协议,返回默认是json格式。比wcf简单 更通用,更轻量级,更省流量(json格式);
WebAPI尽可能复用MVC路由、ModelBinder、Filter等知识,但只是模仿
webapi默认路由机制是通过http请求类型匹配Action(REST风格),而MVC的默认路由机制是通过url匹配Action。
可以修改webapi默认路由机制,通过url匹配action
Restfull风格:
就是基于谓词语义进行通讯协议的设计(利用get、post、put、delete请求接口,并通过http状态码返回结果,但是太多不好用)
webapi参数绑定:
get请求:
可以有多个重载、多个参数
如果使用实体参数,实体参数需要加[FromUri]
post请求:
所以只能有一个参数,如果有多个参数,需要以对象的方式传递、或者JObject参数
单个参数,需要加[FromBody],键名称必须是空字符串
实体参数,不需要加[FromBody]
实体参数也可以使用JObject参数接收
可以传json格式字符串,自动绑定实体(请求类型需要设置为json格式 contentType:json)
put请求:
只能有两个参数,一个通过querystring方式传递,作为要更新对象的主键,另一个是[FromBody]字段,如果是多个字段需要封装成实体
public class ValuesController : ApiController { [HttpGet] public string Index([FromUri]User user) { return "index1"; } [HttpGet] public string Index33(string name, int id) { return "index33"; } [HttpGet] public string Index2(int id) { return "index2"; } [HttpPost] public string PIndex1(int id) { return "pindex1"; } [HttpPost] public string PIndex2([FromBody]int id) { return "pindex2"; } [HttpPost] public string PIndex3(User user) { return "pindex3"; } [HttpPost] public string PIndex5(JObject jobj) { var user1 = jobj["UserInfo"].ToObject<User>(); var dog1 = jobj["DogInfo"].ToObject<Dog>(); return "pindex5"; }[HttpPost] public string PIndex6(JObject jobj) { var usider1 = jobj["id"].ToObject<int>(); var name = jobj["name"].ToObject<string>(); return "pindex6"; } } public class User { public int ID { get; set; } public string Name { get; set; } } public class Dog { public string DogName { get; set; } }