`
king_tt
  • 浏览: 2084160 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ASP.NET MVC Web API 学习笔记---联系人增删改查

 
阅读更多

本章节简单介绍一下使用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程序


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics