[.NET WebAPI系列03] WebAPI Controller 中标准CRUD方法
【因】
WebAPI的Controller中,一般都是下面四种方法:
对应于数据操作是我们通常所说的CRUD.
C对应post,R对应Get,U对应Put,D对应Delete。
直接模仿VS 2012 WebAPI项目模板中的CRUD方法,R传回的是要查的值,CUD都是空,这样虽然也满足逻辑,
但是一旦出错,没有有效的错误处理机制,如上一节Controller中的方法,虽然也可以使用,但不适合作为商用项目中的标准方法.
所以在此总结出较标准的CRUD方法模板,以供参考。
【果】
改编自第一节中的CRUD方法
1.Read
1)GET api/courses/id
不同于以前返回的是要查找的对象,现在返回的是HttpResponseMessage对象,其中可以包含要返回的对象值,一旦出错,会有恰当的
错误代码及信息返回。
// GET api/courses/id
public HttpResponseMessage Get(int id)
{
HttpResponseMessage msg=null;
var ret=(from c in courses
where c.id==id
select c).FirstOrDefault();
//todo: if null- should return 404
if (ret == null)
{
msg = Request.CreateErrorResponse(HttpStatusCode.NotFound, "Course not found");
}
else
{
msg = Request.CreateResponse<course>(HttpStatusCode.OK, ret);
}
return msg;
}
2.Create
Post api/courses/
// Post api/courses
public HttpResponseMessage Post([FromBody]course c)
{
c.id = courses.Count;
courses.Add(c);
//TODO:: should return a 201 with a location head
var msg = Request.CreateResponse(HttpStatusCode.Created);
msg.Headers.Location = new Uri(Request.RequestUri + c.id.ToString());
return msg;
}
3.Update
// Put api/courses/id
public HttpResponseMessage Put(int id, [FromBody]course c)
{
HttpResponseMessage msg = null;
var ret = (from v in courses
where v.id == c.id
select v).FirstOrDefault();
if (ret == null)
{
msg = Request.CreateErrorResponse(HttpStatusCode.NotFound, "Course not found");
}
else
{
ret.title = c.title;
msg = Request.CreateResponse<course>(HttpStatusCode.Accepted, ret);
msg.Headers.Location = new Uri(Request.RequestUri + c.id.ToString());
}
return msg;
}
4.Delete
// Delete api/courses/id
public HttpResponseMessage Delete(int id)
{
HttpResponseMessage msg = null;
var ret = (from c in courses
where c.id == id
select c).FirstOrDefault(); if (ret == null)
{
msg = Request.CreateErrorResponse(HttpStatusCode.NotFound, "Course not found");
}
else
{
courses.Remove(ret);
msg = Request.CreateResponse<course>(HttpStatusCode.Gone, ret);
}
return msg;
}
[.NET WebAPI系列03] WebAPI Controller 中标准CRUD方法的更多相关文章
- [.NET WebAPI系列02] WebAPI 中的HTTP通信
[前言] 本节用于承上启下,通过第一节了解的WebAPI的基本语法,Controller CRUD方法的基本格式: 但很多场合,第一节中的Web API Controller方法返回的信息 过于简单, ...
- Hadoop HBase概念学习系列之hbase shell中执行java方法(高手必备)(二十五)
hbase shell中执行java方法(高手必备),务必掌握! 1. 2. 3. 4. 更多命令,见scan help.在实际工作中,多用这个!!! API参考: http://hbase.apac ...
- WebApi系列~在WebApi中实现Cors访问
回到目录 说在前 Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法, ...
- [.NET WebAPI系列01] WebAPI 简单例子
[源] 来自微软WebAPI官方视频,Introduction to the ASP.NET Web API --Uniform Interface -- Demo-Using convention ...
- Java系列:关于Java中的桥接方法
这两天在看<Java核心技术 卷1>的泛型相关章节,其中说到了在泛型子类中override父类的泛型方法时,编译器会自动生成一个桥接方法,这块有点看不明白. 书上的例子代码如下: publ ...
- 03 - 替换vtkDataObject中的GetProducerPort()方法 VTK 6.0 迁移
VTK6 引入了许多不兼容的变.其中之一是删除vtkDataObject中所有有关管道的方法.其中的一个方法就是GetProducerPort(). 一般,先前使用这个方法如下例子: vtkPolyD ...
- controller中两个方法之间共享一个变量LinkedHashMap
1:引用传递,创建一个变量,给两个线程都传递进去. 2:静态修饰 static 通过该修饰符说明,该变量只有一份, 所有线程共用一份. 例如下面的htmlidMap通过static变量修饰, up ...
- [springBoot系列]--spring-boot-devtools在Idea中热部署方法
1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.sprin ...
- Java多线程开发系列之五:Springboot 中异步请求方法的使用
Springboot 中异步线程的使用在过往的后台开发中,我们往往使用java自带的线程或线程池,来进行异步的调用.这对于效果来说没什么,甚至可以让开发人员对底层的状况更清晰,但是对于代码的易读性和可 ...
随机推荐
- Entity Framework 基础
在忙碌中渡过了5,6,7 月份,现在些抽点时间对Entity Framework的使用做一些基础的回忆. Entity Framework 是什么? Entity Framework(EF)和我们所熟 ...
- java 使用 comet4j 主动向客户端推送信息 简单例子
[背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...
- 【BZOJ】【3404】【USACO2009 Open】Cow Digit Game又见数字游戏
博弈论 Orz ZYF 从前往后递推……反正最大才10^6,完全可以暴力预处理每个数的状态是必胜还是必败(反正才两个后继状态),然后O(1)查询……我是SB /******************** ...
- Unsupervised Learning: Use Cases
Unsupervised Learning: Use Cases Contents Visualization K-Means Clustering Transfer Learning K-Neare ...
- vc6命令行编译工程方法
查vc++ 6.0 的 msdn找到下面的命令: msdev FileName [/MAKE "ProjectName – ConfigName | ALL"] [/REBUILD ...
- Ubuntu 下使用Remmina Remote Desktop client 连接windows server输入法的问题
Ubuntu 自带的Remmina Remote Desktop 用来连接windows,vnc,ssh等非常方便好用, 但我在连接windows 2008 r2 server时遇到一个问题: ...
- 比較Backbone.js, Angular.js, Ember.js, Knockout.js 心得
還記得第一次寫網站的時候,我無意間寫成了 SPA(single page application),當時還沒有SPA這個詞,後來因為廣告主需要不同 url location 頁面的廣告展示,只好把部分 ...
- 1. what is Lua?
glue language Lua is a proven, robust language, small.
- POJ2251Dungeon Master
http://poj.org/problem?id=2251 题意 : 就是迷宫升级版,从以前的一个矩阵也就是一层,变为现在的L层," . "是可以走,但是“#”不可以走,从S走到 ...
- Spring整合Ibatis
Spring整合Ibatis javaibatisspring 所需jar清单 ibatis-2.*.jar *为任意版本,下同,ibatis工作包 sp ...