博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC Web API 学习笔记---联系人增删改查
阅读量:7255 次
发布时间:2019-06-29

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

本章节简单介绍一下使用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文件夹右键添加一个实体类,代码如下

public 
class Contact
    {
        
public 
int ID { 
get
set; }
        
public 
string Name { 
get
set; }
        
public 
string Sex { 
get
set; }
        
public DateTime Birthday { 
get
set; }
        
public 
int Age { 
get
set; }

}

 

(4) 添加一个数据操作接口

public 
interface IContactRep
    {
        
///
 
<summary>
        
///
 查询所有
        
///
 
</summary>
        
///
 
<returns></returns>
        IEnumerable<Contact> GetListAll();
        
///
 
<summary>
        
///
 根据ID查询
        
///
 
</summary>
        
///
 
<param name="id"></param>
        
///
 
<returns></returns>
        Contact GetByID(
int id);
        
///
 
<summary>
        
///
 添加
        
///
 
</summary>
        
///
 
<param name="contact"></param>
        
///
 
<returns></returns>
        Contact Add(Contact contact);
        
///
 
<summary>
        
///
 根据ID删除
        
///
 
</summary>
        
///
 
<param name="id"></param>
        
void Remove(
int id);
        
///
 
<summary>
        
///
 修改
        
///
 
</summary>
        
///
 
<param name="contact"></param>
        
///
 
<returns></returns>
        
bool Update(Contact contact);

    }

 

  (5)  添加数据操作接口实现类 

public 
class ContactRep : IContactRep
    {
        
private Log.Log log = Log.Log.Instance(
typeof(ContactRep));
        
private List<Contact> list = 
new List<Contact>();
        
public ContactRep()
        {
            log.Info(
"
执行构造方法
");
            list.Add(
new Contact() { ID = 
1, Age = 
23, Birthday = Convert.ToDateTime(
"
1977-05-30
"), Name = 
"
情缘
", Sex = 
"
" });
            list.Add(
new Contact() { ID = 
2, Age = 
55, Birthday = Convert.ToDateTime(
"
1937-05-30
"), Name = 
"
令狐冲
", Sex = 
"
" });
            list.Add(
new Contact() { ID = 
3, Age = 
12, Birthday = Convert.ToDateTime(
"
1987-05-30
"), Name = 
"
郭靖
", Sex = 
"
" });
            list.Add(
new Contact() { ID = 
4, Age = 
18, Birthday = Convert.ToDateTime(
"
1997-05-30
"), Name = 
"
黄蓉
", Sex = 
"
" });
        }
        
public IEnumerable<Contact> GetListAll()
        {
            
return list;
        }
        
public Contact GetByID(
int id)
        {
            
return list.Find(item => item.ID == id);
        }
        
public Contact Add(Contact contact)
        {
            
if (contact == 
null)
            {
                
throw 
new NullReferenceException(
"
空引用异常
");
            }
            
int maxid = list.Max(item => item.ID);
            contact.ID = maxid + 
1;
            list.Add(contact);
            
return contact;
        }
        
public 
void Remove(
int id)
        {
            list.RemoveAll(item=>item.ID==id);
        }
        
public 
bool Update(Contact contact)
        {
            
if (contact == 
null)
            {
                
throw 
new NullReferenceException(
"
空引用异常
");
            }
            Remove(contact.ID);
            list.Add(contact);
            
return 
true;
        }

    } 

 

 

(6)Controllers文件中添加一个APIController 

 

 

 

 

  3. 获得一个资源

Action

HTTP method

Relative URI

GetAllContact

GET

/api/contact

GetContact

GET

/api/contact/id

GetListBySex

GET

/api/contact?sex=sex

 

获得所有联系人

public IEnumerable<Contact> GetAllContact()
{
            
return provider.GetListAll();

这个方法以Get开头,用于匹配Get方式请求,因为这个方法没有参数,所以这个方法将匹配/api/contact的请求

 

根据id获得联系人

public Contact GetContact(
int id)
{
            Contact contact = provider.GetByID(id);
            
if (contact == 
null)
            {
                
throw 
new HttpResponseException(HttpStatusCode.NotFound);
            }
            
return contact;

这个方法也是以Get方式开头,而这个方法包含一个id参数,这个方法会匹配/api/contact/id 的请求,而请求中的参数id会自动转换为int类型

如果没有找到相应id的联系人,则会抛出一个HttpResponseMessage的异常,这个异常是指向的404异常,请求资源不存在。

 

根据性别获得资源

public IEnumerable<Contact> GetListBySex(
string sex)
{
            
return provider.GetListAll().Where(item => item.Sex == sex);

如果一个请求中包含了一个查询的参数,web api 将尝试匹配/api/contact?sex=sex

 

 

4. 创建一个资源

客户端发送一个Post请求,会创建一个新的contact

public Contact PostContact(Contact contact)
{
            contact = provider.Add(contact);
            
return contact;

为了处理post请求,我们需要声明一个以post开头的方法,方法中包含一个Contact类型的参数,这个参数从请求的body中序列化而来,所以客户端调用的时候传递的要是一个序列化过的Contact对象,序列化的格式可以是jsonxml

 

创建资源响应状态:

Response Code 默认情况下,web api框架设置响应的状态为200(OK), 基于Http/1.1 协议,在使用post创建一个资源contact的时候,服务器响应状态为201 (Created)

Location:  当创建一个新的资源之后,我们需要 Response Headers 路径中包含一个URIWeb API框架将这个边的非常简单,看如下代码:

public HttpResponseMessage PostContact(Contact contact)
{
            contact = provider.Add(contact);
            HttpResponseMessage response = Request.CreateResponse<Contact>(HttpStatusCode.Created, contact);
            
string uri = Url.Link(
""
new { id = contact.ID });
            response.Headers.Location = 
new Uri(uri);
            
return response;

这个方法返回的是一个HttpResponseMessage 而不是一个contact对象,我们可以获得请求响应的详细信息,包括状态码以及响应头信息。

使用CreateResponse可以创建一个HttpResonseMessage,并且会自动将Contact对象序列化写入响应Body中。

 

5.       修改一个资源 

public 
void PutContact(
int id, Contact contact)
{
            contact.ID = id;
            
bool flag = provider.Update(contact);
            
if (!flag)
            {
                
throw 
new HttpResponseException(HttpStatusCode.NotFound);
            }

方式是以Put开头,当请求Mehtod Put,这个请求将匹配这个方法,方法中包含了两个参数,这两个参数来自URI请求参数和Request Body  

 

6. 删除一个资源

public 
void DeleteContact(
int id)
{
            provider.Remove(id);
            
throw 
new HttpResponseException(HttpStatusCode.NoContent);

     删除基本和上面都一样了,只是请求
method
不一样而已,这里不再累述

 

  客户端调用参考上一章说明代码

 

相关参考文章链接

 

 

转载地址:http://ljzdm.baihongyu.com/

你可能感兴趣的文章
CCNP路 由 选 择 原 理
查看>>
input 特殊字符限制
查看>>
ubuntu14.04配置python 配置OPENCV
查看>>
String类的subString(i)方法(基于jdk 1.9)
查看>>
Java并发包--ConcurrentLinkedQueue
查看>>
vue.js组件命名
查看>>
python------栈和队列的实现
查看>>
Css选择器定位详解
查看>>
selenium入门基础知识
查看>>
并查集的一般操作 ④
查看>>
Altium Designer 19使用
查看>>
Java中的字符串
查看>>
LeetCode-Remove Nth Node From End of List
查看>>
Exp2 后门原理与实践_20151208丛俐宇
查看>>
方向向量和法向量
查看>>
nodejs + ionic2 + cordova环境搭建
查看>>
BlockingQueue 堵塞队列
查看>>
vim: vimrc配置文件
查看>>
美化git客户端(命令行)
查看>>
设计模式:概念
查看>>