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

简介: 本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查。目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的。下面我们通过创建一个简单的Web API来管理联系人          说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟   1.

本章节简单介绍一下使用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 {  getset; }

         public  string Name {  getset; }

         public  string Sex {  getset; }

         public DateTime Birthday {  getset; }

         public  int Age {  getset; }

}

 

(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 不一样而已,这里不再累述

 

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

代码下载 

相关参考文章链接

ASP.NET MVC Web API 学习笔记---第一个Web API程序
 

 

相关文章
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
140 3
|
2月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
98 9
|
2月前
|
存储 开发框架 .NET
.NET 8 实现无实体库表 API 部署服务
【10月更文挑战第12天】在.NET 8中,可通过以下步骤实现无实体库表的API部署:首先安装.NET 8 SDK及开发工具,并选用轻量级Web API框架如ASP.NET Core;接着创建新项目并设计API,利用内存数据结构模拟数据存储;最后配置项目设置并进行测试与部署。此方法适用于小型项目或临时解决方案,但对于大规模应用仍需考虑持久化存储以确保数据可靠性与可扩展性。
|
3月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
3月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
108 3
|
3月前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
62 5
|
2月前
|
监控 安全 API
Docker + .NET API:简化部署和扩展
Docker + .NET API:简化部署和扩展
39 0
|
2月前
|
监控 安全 API
最完美的扩展Docker + .NET API:简化部署和扩展
最完美的扩展Docker + .NET API:简化部署和扩展
85 0
|
2月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
30 0
|
4月前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
64 0