博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[.NET WebAPI系列01] WebAPI 简单例子
阅读量:4496 次
发布时间:2019-06-08

本文共 4070 字,大约阅读时间需要 13 分钟。

【源】

  来自微软WebAPI官方视频,Introduction to the ASP.NET Web API --Uniform Interface -- Demo-Using convention 这一节。

  

      先上一张WebAPI中所有用户Controller都必须继承的ApiController基类代码:

  

【详】

  1.VS 2012中新建一MVC4的WebAPI项目;

      2.添加CoursesController空WebAPI控制器,代码如下: 

1 namespace WebApiDemo.Controllers 2 { 3     public class course 4     { 5         public int id; 6         public string title; 7     } 8     public class CoursesController : ApiController 9     {10         static List
courses = InitCourses();11 private static List
InitCourses()12 {13 var ret = new List
();14 ret.Add(new course { id = 0, title = "Web Api" });15 ret.Add(new course { id = 1, title = "Mobile programing" });16 return ret;17 }18 19 public IEnumerable
Get()20 {21 return courses;22 }23 24 }25 }

  3.在HomeView中呈现:

  更改/Views/Home/Index.cshtml代码,使其和下面代码相同;

1 
2
    3 4
5
6 @section scripts 7 { 8 22 }

  注意:

    1) 原理:用jQuery代码,指定要访问的url是coursescontroller所在uri,从而获取courses的json数据;

        如果获取成功,执行success后代码,通过循环将li添加到指定的ol中。

    2)ol标签的id必须为courses,和下面$('#courses')中的相同,否则挂不上;

       url、success等关键字也不能写错,否则运行不出,而且jQuery错误比较难查。

【果】

  最终效果:

  

 【update】

  上面紧紧展示了GETALL的用法,CRUD补全后的Controller如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net; 5 using System.Net.Http; 6 using System.Web.Http; 7  8 namespace WebApiDemo.Controllers 9 {10     public class course11     {12         public int id;13         public string title;14     }15     public class CoursesController : ApiController16     {17         static List
courses = InitCourses();18 private static List
InitCourses()19 {20 var ret = new List
();21 ret.Add(new course { id = 0, title = "Web Api" });22 ret.Add(new course { id = 1, title = "Mobile programing" });23 return ret;24 }25 26 // GET api/courses27 public IEnumerable
Get()28 {29 return courses;30 }31 32 // GET api/courses/id33 public course Get(int id)34 { 35 var ret=(from c in courses36 where c.id==id37 select c).FirstOrDefault();38 //todo: if null- should return 40439 return ret;40 }41 42 // Post api/courses43 public void Post([FromBody]course c)44 {45 c.id = courses.Count;46 courses.Add(c);47 //TODO:: should return a 201 with a location head48 49 }50 51 // Put api/courses/id52 public void Put(int id, [FromBody]course c)53 {54 var ret = (from v in courses55 where v.id == c.id56 select v).FirstOrDefault();57 ret.title = c.title;58 }59 60 // Delete api/courses/id61 public void Delete(int id)62 {63 var ret = (from c in courses64 where c.id == id65 select c).FirstOrDefault();66 courses.Remove(ret);67 }68 }69 }

  在此就不再为每个方法创建视图了,如果想要测试结果,可以使用视频中推荐的"Fiddler Web Debugger",官网:

  另外,如果不想使用Get、Put、Delete、Post作为WebApi Controller CRUD的方法名,就需要在自定义方法明前标注Attribute:

  • C :[HttpPost]
  • R  : [HttpGet]
  • U  : [HttpPut]
  • D  : [HttpDelete]

  如:

1 // GET api/courses2         [HttpGet]3         public IEnumerable
AllCourses()4 {5 return courses;6 }

 【知识点解析】

  1.WebAPi Controller 方法参数中的[FromBody]&[FromUri],称为ModleBinding attribute

   参数前缀修饰,用来指定参数值的来源。

   FromBody:指示当前参数来源自HTML 的Body中,body只能被读取一次;

   FromUri:指示当前参数来源于URL,比如QuerryString。

   被修饰的参数,就不需要再给形参赋值,

   WebAPI会自动将URI或HTTP Body中符合要求的数据绑定到方法中

转载于:https://www.cnblogs.com/chutianshu1981/p/3288796.html

你可能感兴趣的文章
任务20:DI初始化的源码解读 & 任务21:依赖注入的使用
查看>>
TypeScript完全解读(26课时)_10.TypeScript完全解读-枚举
查看>>
构建之法4
查看>>
String to Integer (atoi)
查看>>
Servlet API
查看>>
【iCore4 双核心板_FPGA】例程十:FSMC总线通信实验——复用地址模式
查看>>
PyCharm命令行输入
查看>>
ThinkPHP5.0 模型更新操作
查看>>
鼠标经过时 表格行的背景色更改
查看>>
Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note
查看>>
js数组操作总结
查看>>
九九乘法表
查看>>
写个.net开发者的Linux迁移指南
查看>>
搭建使用SVN的快速教程
查看>>
openlayers显示区域
查看>>
适配器模式学习
查看>>
android脚步--Relativelayout设置
查看>>
第一周博客作业2018091-2
查看>>
Spring boot JPA读取数据库方法
查看>>
TEA对称加密算法
查看>>