ASP.NET Web Api OwinSelfHost Restful 使用
一、前言
总结一下什么是RESTful架构:
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
二、示例
Restful 路由模板默认没有{action},如有特殊需要,则需要启用属性路由功能配合使用
1.Startup.cs
public void Configuration(IAppBuilder app) { HttpConfiguration config = new HttpConfiguration(); // 启用Web API特性路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //删除XML序列化器 config.Formatters.Remove(config.Formatters.XmlFormatter); //配置跨域 app.UseCors(CorsOptions.AllowAll); app.UseWebApi(config); }
2.代码示例
1 [RoutePrefix("home")] 2 public class HomeController : ApiController 3 { 4 // GET api/home 5 [HttpGet] 6 public string Get() 7 { 8 return "test"; 9 } 10 11 [HttpGet] 12 // GET api/home/5 13 public string Get(int id) 14 { 15 return id.ToString(); 16 } 17 18 [HttpGet] 19 // GET api/home?name=test 20 public string Get(string name) 21 { 22 return name; 23 } 24 25 [HttpGet] 26 // GET api/home/1?name=test 27 //id 能匹配到{id}路由模板 28 public string Get(string name, int id) 29 { 30 return name + id; 31 } 32 33 [HttpGet] 34 // GET api/home/1?adress=test 35 //id 能匹配到{id}路由模板 36 public string GetAdress(string adress, int id) 37 { 38 return adress + id; 39 } 40 41 // GET api/home/1?name=test&age=30 42 [HttpGet] 43 public string Get(int id, string name, int age) 44 { 45 return id + name + age; 46 } 47 48 // POST api/home 49 [HttpPost] 50 public void Post(Person p) 51 { 52 } 53 54 55 // POST home/post2 56 [HttpPost] 57 [Route("post2")] 58 public void Post2(Person p) 59 { 60 } 61 62 [HttpPut] 63 // PUT api/home/5 64 public void Put(string id, Person p) 65 { 66 } 67 68 // PUT home/put2 69 [HttpPut] 70 [Route("put2")] //多个POST或PUT需要走action 71 public void Put2(Person p) 72 { 73 } 74 75 // DELETE api/home/5 76 [HttpDelete] 77 public void Delete(int id) 78 { 79 } 80 81 // DELETE api/home/5?type=1&name=test 82 [HttpDelete] 83 public void Delete(int id, string type, string name) 84 { 85 } 86 }