本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查。目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的。下面我们通过创建一个简单的Web API来管理联系人
说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟
1. Web API中包含的方法
Action
|
HTTP method
|
Relative URI
|
GetAllContact
|
GET
|
/api/contact
|
GetContact
|
GET
|
/api/contact /id
|
GetListBySex
|
GET
|
/api/contact?sex=sex
|
PostContact
|
POST
|
/api/contact
|
PutContact
|
PUT
|
/api/contact/id
|
DeleteContact
|
DELETE
|
/api/contact/id
|
http 四个主要的处理方法(get,put,post,delete)能够用来处理匹配增删改查操作:
Get 可以在服务端检索匹配URI匹配的资源,不会对服务器数据进行修改操作
Put 用户修改URI指定的特定资源,如果服务端允许,Put 也可以用户创建新的资源
Post 可以用于创建一个资源。服务端会为这个资源创建一个新的URI,并且将这个资源作为ResposeMessage 的一部分返回
Delete 用户删除URI匹配的资源
2. 创建一个工程
(1)启动VS2012,在已经安装的模板中选择ASP.NET MVC4 Web 应用程序,单击确定
(2)在ASP.NET MVC 4 项目对话框中选择 Web API,单击确定
(3)添加一个Model,工程选择Models文件夹右键添加一个实体类,代码如下
publicclassContact
{
publicintID{
get;
set;}
publicstringName{
get;
set;}
publicstringSex{
get;
set;}
publicDateTimeBirthday{
get;
set;}
publicintAge{
get;
set;}
}
(4)添加一个数据操作接口
publicinterfaceIContactRep
{
///<summary>
///查询所有
///</summary>
///<returns></returns>
IEnumerable<Contact>GetListAll();
///<summary>
///根据ID查询
///</summary>
///<paramname="id"></param>
///<returns></returns>
ContactGetByID(
intid);
///<summary>
///添加
///</summary>
///<paramname="contact"></param>
///<returns></returns>
ContactAdd(Contactcontact);
///<summary>
///根据ID删除
///</summary>
///<paramname="id"></param>
voidRemove(
intid);
///<summary>
///修改
///</summary>
///<paramname="contact"></param>
///<returns></returns>
boolUpdate(Contactcontact);
}
(5)添加数据操作接口实现类
publicclassContactRep:IContactRep
{
privateLog.Loglog=Log.Log.Instance(
typeof(ContactRep));
privateList<Contact>list=
newList<Contact>();
publicContactRep()
{
log.Info(
"执行构造方法");
list.Add(
newContact(){ID=
1,Age=
23,Birthday=Convert.ToDateTime(
"1977-05-30"),Name=
"情缘",Sex=
"男"});
list.Add(
newContact(){ID=
2,Age=
55,Birthday=Convert.ToDateTime(
"1937-05-30"),Name=
"令狐冲",Sex=
"男"});
list.Add(
newContact(){ID=
3,Age=
12,Birthday=Convert.ToDateTime(
"1987-05-30"),Name=
"郭靖",Sex=
"男"});
list.Add(
newContact(){ID=
4,Age=
18,Birthday=Convert.ToDateTime(
"1997-05-30"),Name=
"黄蓉",Sex=
"女"});
}
publicIEnumerable<Contact>GetListAll()
{
returnlist;
}
publicContactGetByID(
intid)
{
returnlist.Find(item=>item.ID==id);
}
publicContactAdd(Contactcontact)
{
if(contact==
null)
{
thrownewNullReferenceException(
"空引用异常");
}
intmaxid=list.Max(item=>item.ID);
contact.ID=maxid+
1;
list.Add(contact);
returncontact;
}
publicvoidRemove(
intid)
{
list.RemoveAll(item=>item.ID==id);
}
publicboolUpdate(Contactcontact)
{
if(contact==
null)
{
thrownewNullReferenceException(
"空引用异常");
}
Remove(contact.ID);
list.Add(contact);
returntrue;
}
}
(6)在Controllers文件中添加一个APIController
3. 获得一个资源
Action
|
HTTP method
|
Relative URI
|
GetAllContact
|
GET
|
/api/contact
|
GetContact
|
GET
|
/api/contact/id
|
GetListBySex
|
GET
|
/api/contact?sex=sex
|
获得所有联系人
publicIEnumerable<Contact>GetAllContact()
{
returnprovider.GetListAll();
}
这个方法以Get开头,用于匹配Get方式请求,因为这个方法没有参数,所以这个方法将匹配/api/contact的请求
根据id获得联系人
publicContactGetContact(
intid)
{
Contactcontact=provider.GetByID(id);
if(contact==
null)
{
thrownewHttpResponseException(HttpStatusCode.NotFound);
}
returncontact;
}
这个方法也是以Get方式开头,而这个方法包含一个id参数,这个方法会匹配/api/contact/id 的请求,而请求中的参数id会自动转换为int类型
如果没有找到相应id的联系人,则会抛出一个HttpResponseMessage的异常,这个异常是指向的404异常,请求资源不存在。
根据性别获得资源
publicIEnumerable<Contact>GetListBySex(stringsex)
{
returnprovider.GetListAll().Where(item=>item.Sex==sex);
}
如果一个请求中包含了一个查询的参数,web api 将尝试匹配/api/contact?sex=sex
4.创建一个资源
客户端发送一个Post请求,会创建一个新的contact
publicContactPostContact(Contactcontact)
{
contact=provider.Add(contact);
returncontact;
}
为了处理post请求,我们需要声明一个以post开头的方法,方法中包含一个Contact类型的参数,这个参数从请求的body中序列化而来,所以客户端调用的时候传递的要是一个序列化过的Contact对象,序列化的格式可以是json,xml。
创建资源响应状态:
Response Code: 默认情况下,web api框架设置响应的状态为200(OK), 基于Http/1.1 协议,在使用post创建一个资源contact的时候,服务器响应状态为201 (Created)
Location: 当创建一个新的资源之后,我们需要 Response Headers 路径中包含一个URI。Web API框架将这个边的非常简单,看如下代码:
publicHttpResponseMessagePostContact(Contactcontact)
{
contact=provider.Add(contact);
HttpResponseMessageresponse=Request.CreateResponse<Contact>(HttpStatusCode.Created,contact);
stringuri=Url.Link(
"",
new{id=contact.ID});
response.Headers.Location=
newUri(uri);
returnresponse;
}
这个方法返回的是一个HttpResponseMessage 而不是一个contact对象,我们可以获得请求响应的详细信息,包括状态码以及响应头信息。
使用CreateResponse可以创建一个HttpResonseMessage,并且会自动将Contact对象序列化写入响应Body中。
5. 修改一个资源
publicvoidPutContact(
intid,Contactcontact)
{
contact.ID=id;
boolflag=provider.Update(contact);
if(!flag)
{
thrownewHttpResponseException(HttpStatusCode.NotFound);
}
}
方式是以Put开头,当请求Mehtod 为Put,这个请求将匹配这个方法,方法中包含了两个参数,这两个参数来自URI请求参数和Request Body 中
6. 删除一个资源
publicvoidDeleteContact(intid)
{
provider.Remove(id);
thrownewHttpResponseException(HttpStatusCode.NoContent);
}
删除基本和上面都一样了,只是请求method 不一样而已,这里不再累述
客户端调用参考上一章说明代码
代码下载
相关参考文章链接
ASP.NET MVC Web API 学习笔记---第一个Web API程序
分享到:
相关推荐
使用AngularJs ASP.NET MVC Web API EF构建一个多层SPA的例子 使用AngularJs ASP.NET MVC Web API EF构建一个多层SPA的例子
ASP.NET MVC Web Api 跨域访问
asp.net MVC5 + Bootstrap 增删改查分页(重点是里面的table及分页用法)。另外说一下项目用到了bootstrap-table,bootstrap-dialog,bootstrap-daterangepicker组件,很不错的几个组件
ASP.NET MVC5增删改查,包含LINQ和ADO两种(ADO只实现了List Detail和Delete,Edit留给你自己思考了),LINQ版本实现了完整的CRUD,并且演示了MVC5 的新特性Attribute Route以及异步的修改、删除控制器。 相關討論參...
ASP.NET MVC3 简单的增删改查分页例子(附数据库,下载即可运行),适合新手使用,实现增删该查以及分页功能(使用老外写的一个jquery插件完成超炫的分页效果),代码简洁,注释详细,欢迎大家下载使用。
ASP.NET WEB开发学习实录---源码
ASP.NET MVC 经典面试及答案-76页 基础学习资料 技术博客: http://zengxiangzhan.cnblogs.com/
ASP.NET MVC学习笔记-Controller与View传值.
Asp.Net MVC5 + BootStrap 增删改查分页(v1.0)
ASP.NET MVC 1.0 MSDN Reference CHM Version ASP.NET MVC 1.0 MSDN 参考及类库,CHM版本,从MSDN 官方网站下载并编译。源分支URL: http://msdn.microsoft.com/en-us/library/dd394709.aspx 内容列表: ASP.NET MVC...
ASP.NET MVC4 Web API+VS2013 编写、发布及部署流程,其中部署的环境包括Windows7和阿里云服务器,自己边写边整理的文档,有很高的实际参考价值,适用于新手
asp.net mvc4
asp.net MVC 的新手留言薄 --适合新手的
ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 ... 下面我们建立了一个WebApi类型的项目,项目中对产品Product进行增删改查,Product的数据存放在List列表(即内存)中。
十八、[ASP.NET MVC 小牛之路]18 - Web API 十九、[ASP.NET MVC 大牛之路]01 - 开篇 二十[ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件 二一、[ASP.NET MVC 大牛之路]03 - C#高级知识点概要(2) -...
第1章:ASP.NET MVC基础 第2章:ASP.NET Web Form开发人员必读 第3章:使用数据 第4章:客户端开发 第5章:Web应用程序架构 第6章:使用AJAX提升网站体验 第7章:ASP.NET Web API 第8章:高级数据 第9章:安全 第10...
asp.net mvc 增删改查实例,不是使用entity framework来实现的,使用传统的ADO.NET来实现的,很好的一个实例。
ASP.NET MVC 5入门指南 (中文PDF+源碼) 1. ASP.NET MVC 5 - 开始MVC 5之旅 2. ASP.NET MVC 5 - 控制器 3. ASP.NET MVC 5 - 视图 4. ASP.NET MVC 5 - 将数据从控制器传递给视图 5. ASP.NET MVC 5 - 添加一个模型 6. ...
ASP.NET MVC2_增删改查 示例 附数据库脚本 适合初学者(自己学时mvc时做的示例)