ASP.NET Web API 开篇示例介绍

ASP.NET Web API

对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着。

陌生的是ASP.NET Web API是一个全新的框架,对于这个框架在一个项目中起到的作用我暂且还不是很清楚这里也就不妄下结论了,说实话不是我不想而是我无能为力,只能自己去摸索试着去了解它。

熟悉的是ASP.NET Web API跟ASP.NET MVC的框架结构一开始看起来有一些相似的地方。

话就不多说了,大家就和我一起来学习ASP.NET Web API这个全新的框架吧。

ASP.NET Web API演示示例

环境基础配置

首先我们新建一个类库项目命名为Common,并且定义个货品信息类型,示例代码如下:

代码1-1

namespaceCommon
{publicclassProduct{publicstringProductID { get; set; }publicstringProductName { get; set; }publicstringProductCategory { get; set; }}
}

建立WebHost宿主环境

然后我们接着创建一个空的ASP.NET WEB应用程序命名为WebHost,这里说明一下ASP.NET Web API框架只是个独立框架,它并不能独立运行,所以它需要宿主环境,刚刚我们新建的WEB应用程序则会在下面的示例中暂时的承载着ASP.NET Web API框架来运行。

引用程序集

Newtonsoft.Json.dll 路径: C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Newtonsoft.Json.4.5.6\lib\net40Newtonsoft.Json.dll

System.Net.Http.dll 路径:C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\ System.Net.Http.dll

System.Net.Http.Formatting.dll路径:C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\ System.Net.Http.Formatting.dll

System.Web.Http.dll 路径:C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\ System.Web.Http.dll

System.Web.Http.WebHost.dll路径:C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Http.WebHost.dll

Common.dll (项目引用)

或者采用这种引用方式:

(如果上文中所述的目录位置没有Newtonsoft.Json.dll的话可以文件搜索一下,然后手动引用。)

随之我们再建立一个Web应用程序处理类Globl.asax ,并在其Application_Start()方法中注册路由,示例代码如下:

代码1-2

usingSystem.Web.Http;namespaceWebHost
{publicclassGlobal : System.Web.HttpApplication{protectedvoidApplication_Start(objectsender, EventArgse){GlobalConfiguration.Configuration.Routes.MapHttpRoute("DefaultAPI", "api/{controller}/{id}", new { controller="product",id=RouteParameter.Optional });}}
}

路由注册好了之后,我们还得新建个Web API控制器,命名为ProductController,示例代码如下:

代码1-3

usingSystem.Web.Http;
usingCommon;namespaceWebHost.Controllers
{publicclassProductController:ApiController{privatestaticList<Product>products;staticProductController(){products=newList<Product>();products.AddRange(newProduct[] {newProduct(){ ProductID="001", ProductName="牙刷",ProductCategory="洗漱用品"},newProduct(){ ProductID="002", ProductName="《.NET框架设计—大型企业级应用框架设计艺术》", ProductCategory="书籍"}});}publicIEnumerable<Product>Get(stringid=null){returnfromproductinproductswhereproduct.ProductID==id||string.IsNullOrEmpty(id) selectproduct;}}
}

在代码1-3中我们看到ProductController控制器继承自ApiController,这里的方式我的猜想应该是跟ASP.NET MVC框架对控制器的处理一样,在请求到来之后并且经过路由处理之后,Web API框架会把当前项目中所有引用的程序集全部查找一下并且搜出继承自ApiController的类型,并且缓存在一个xml文件,不知道猜想的对不对在后面的篇幅我们再来验证,这里提一下。

细心的朋友的可能发现在路由注册的时候并没有对应的Action的路由参数,其实这里就是Web API框架的一个不同之处,它是根据Http请求方法来确定Action的方法的,然而浏览器默认的请求方法就是Http-get,所以我们这个时候可以直接运行项目。

图2

建立SelfHost

下面我们来看一下在SelfHost宿主环境中ASP.NET Web API框架的使用示例。

首先我们新建一个控制台应用程序命名为SelfHost,SelfHost环境项目的程序集引用和上面所说的WebHost项目引用唯一不同的就是把System.Web.Http.WebHost.dll程序集换成System.Web.Http.SelfHost.dll程序集,引用路径不变,也可以利用引用里的扩展栏来添加。

下面就让我们看一下在SelfHost中我们需要做哪些事,首先我们需要注册路由这是每次最先做的事情,示例代码如下:

代码1-4

usingSystem.Web.Http;
usingSystem.Web.Http.SelfHost;namespaceSelfHost
{classProgram{staticvoidMain(string[] args){HttpSelfHostConfigurationselfHostConfiguration=newHttpSelfHostConfiguration("http://localhost/selfhost");using (HttpSelfHostServerselfHostServer=newHttpSelfHostServer(selfHostConfiguration)){selfHostServer.Configuration.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id=RouteParameter.Optional});selfHostServer.OpenAsync();Console.WriteLine("服务器端服务监听已开启");Console.Read();}}}
}

这里就简要的说明一下,在1-4代码中HttpSelfHostConfiguration对象示例中设置了基地址,对于HttpSelfHostConfiguration类型它是继承自HttpConfiguration类型,HttpConfiguration类型是比较重要的一个类型,WebAPI框架中大多数的配置信息都在此类型实例中进行设置。在后续的篇幅中会有说到。

HttpSelfHostServer对象就是在SelfHost宿主环境中担当着很重要的角色,它负责处理请求等一系列操作(因为它是WebAPI框架在SelfHost环境中的管道模型的&ldquo;龙头&rdquo;),在这里只要稍作了解就行了,会在后面的管道篇幅揭开它的神秘面纱。

继续向下看我们会看到HttpSelfHostServer对象实例中的Configuration属性里的Routes属性提供了对路由的注册,这部分内容会在后面的路由篇幅讲解。

再之后就是我们看到的,打开服务监听,等待处理请求。(这里的监听/处理请求,并不是对真正的请求进行处理,而是对已经请求被封装好了的对象进行处理,管道篇幅中讲解)

在路由注册之后我们要新建个Web API控制器,就如同上面WebHost部分内容一样,拷贝一份过来,不过我们这里要对控制器的代码稍作修改,示例代码如下:

代码1-5

usingSystem.Web.Http;
usingCommon;namespaceSelfHost.Controllers
{publicclassProductController:ApiController{privatestaticList<Product>products;staticProductController(){products=newList<Product>();products.AddRange(newProduct[] {newProduct(){ ProductID="001", ProductName="牙刷",ProductCategory="洗漱用品"},newProduct(){ ProductID="002", ProductName="《.NET框架设计—大型企业级应用框架设计艺术》", ProductCategory="书籍"}});}publicIEnumerable<Product>Get(stringid=null){returnfromproductinproductswhereproduct.ProductID==id||string.IsNullOrEmpty(id) selectproduct;}publicvoidDelete(stringid){products.Remove(products.First(product=>product.ProductID==id));}publicvoidPost(Productproduct){products.Add(product);}publicvoidPut(Productproduct){Delete(product.ProductID);Post(product);}}
}

对于在代码1-5中控制器新增的几个Action方法,也是分别对应着Http请求方法。这样也就是能实现增删改查的基础功能了。那我们还需要一个对它进行访问的客户端。

建立Clinet

我们再建一个控制台应用程序命名为Clinet,并且添加如下程序集引用:

Newtonsoft.Json.dll 路径: C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Newtonsoft.Json.4.5.6\lib\net40Newtonsoft.Json.dll

System.Net.Http.dll 路径:C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\ System.Net.Http.dll

System.Net.Http.Formatting.dll路径:C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\ System.Net.Http.Formatting.dll

Common.dll (项目引用)

下面我们看一下在Client项目中对SelfHost环境中的资源进行访问的示例,示例代码如下:

代码1-6

usingCommon;
usingSystem.Net.Http;namespaceClient
{classProgram{staticvoidMain(string[] args){AsyncProcess();Console.Read();}privateasyncstaticvoidAsyncProcess(){HttpClienthttpClient=newHttpClient();//获取货品信息列表HttpResponseMessageresponseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product");IEnumerable<Product>products=awaitresponseMessage.Content.ReadAsAsync<IEnumerable<Product>>();OutputProductInfo(products);//添加货品Productproduct=newProduct(){ProductID="003",ProductName="《ASP.NET Web API 2 框架揭秘》",ProductCategory="食品类"};awaithttpClient.PostAsJsonAsync<Product>("http://localhost/selfhost/api/product", product);responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product");products=awaitresponseMessage.Content.ReadAsAsync<IEnumerable<Product>>();OutputProductInfo(products);//修改指定货品信息responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product/003");product= (awaitresponseMessage.Content.ReadAsAsync<IEnumerable<Product>>()).First();product.ProductCategory="书籍";awaithttpClient.PutAsJsonAsync<Product>("http://localhost/selfhost/api/product", product);responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product");products=awaitresponseMessage.Content.ReadAsAsync<IEnumerable<Product>>();OutputProductInfo(products);//删除指定货品awaithttpClient.DeleteAsync("http://localhost/selfhost/api/product/001");responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product");products=awaitresponseMessage.Content.ReadAsAsync<IEnumerable<Product>>();OutputProductInfo(products);}privatestaticvoidOutputProductInfo(IEnumerable<Product>products){foreach (Productproductinproducts){Console.WriteLine("ProductID:{0},ProductName:{1},ProductCategorm:{2}",product.ProductID, product.ProductName, product.ProductCategory);}Console.WriteLine("—————————————————————————");}}
}

对于代码1-5中出现诸多的类型会在后面的篇幅中一一的讲解,这里就不做阐述了,而是看一下我们最终的示例结果:

首先我们要运行SelfHost项目,等待界面和如下图3时,再行Client项目对SelfHost中的资源进行访问。结果如图4

图3

图4

参考资料: http://www.cnblogs.com/artech/p/web-api-sample.html

就是仿照蒋大书籍中的示例简化了一下做了一点调整,因为后面的篇幅中有用到这个示例。

这里吐槽一下起初国内对于Web API的书籍资料几乎没有,当然国外的有是有,不过都是英文版的。对于毫无英语基础的我等于是判了死缓,唯一的活路就是用翻译工具一点点的去看。

还好蒋大的新作出来了,不然想学Web API还真是无路可走。已看完前三章,收获颇多知识点很全面,在后面我学习到一些都会写出来跟大家分享。

转载于:https://blog.51cto.com/jinyuan/1534367

ASP.NET Web API 开篇示例介绍相关推荐

  1. ASP.NET Web API 路由对象介绍

    前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了一些微小的修改,这也是根据每个框架的特性来制定 ...

  2. ASP.net Web API综合示例

    目录 概述 功能介绍 程序结构 服务器端介绍 客户端介绍 "契约" Web API设计规则 并行写入冲突与时间戳 身份验证详解 Web API验证规则 客户端MVVM简介 Web. ...

  3. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  4. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  5. ASP.NET Web API入门介绍(一)

    随着项目的复杂度越来越高,各种第三方系统的数据交互也越来越频繁,不可避免的就要用到Web API接口,这里Web API是一个比较宽泛的概念.本文提到Web API特指ASP.NET Web API. ...

  6. Asp.Net Web Api 2 实现多文件打包并下载文件示例源码

    前言 最近由于工作和个人事务,站点也好久没更新了,但这并不影响我对.NET的热情.站点的更新工作还是得想办法抽时间来完成的. 提要 今天利用中午的时间来写一篇关于Asp.Net Web Api下载文件 ...

  7. java调用asp.net webapi_通过HttpClient 调用ASP.NET Web API示例

    在前面两篇文章中我们介绍了ASP.NET Web API的基本知识和原理,并且通过简单的实例了解了它的基本(CRUD)操作.我们是通过JQuery和Ajax对Web API进行数据操作.这一篇我们来介 ...

  8. ASP.NET Web API Model-ModelBinder

    ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...

  9. ASP.NET Web API 安全筛选器

    原文:https://msdn.microsoft.com/zh-cn/magazine/dn781361.aspx 身份验证和授权是应用程序安全的基础.身份验证通过验证提供的凭据来确定用户身份,而授 ...

最新文章

  1. 基于相机和低分辨率激光雷达的三维车辆检测
  2. RDKit | 基于RDKit的MaxMin方法选择高度多样化的库
  3. 个性化时代的网络媒体 不作就会死
  4. Makefile中的分析(一)
  5. 详解Python的*args和 **kwargs
  6. model模型php,thinkphp的model模型的设计经验总结
  7. Go 语言真是现在进大厂的捷径?
  8. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of SPb
  9. 你的第一个 iOS 应用程序: 100% 的编程方式
  10. python深度学习之TensorFlow
  11. LCD显示--TM1640芯片驱动程序
  12. 暴风影音5完整版(集成Real解码器) 增强去广告版
  13. mysql语句解决查询乱码_sql命令查询出现乱码的解决方法详解
  14. 可视化设计-设备篇(LED屏幕)
  15. 练习:排序数组中查找元素的第一个和最后一个位置
  16. manjaro和android数据线传数据
  17. 关于origin简单作图
  18. (二)基于数据库的认证与授权
  19. layui数据表格分页无法正常显示
  20. 解决方案 word excel vba 以下隐藏模块存在编译错误

热门文章

  1. opencv python3 文本区域识别_使用等高线从图像中提取文本区域 - Opencv,Python
  2. HR问我为什么要离开上一家公司钱没给到位,心委屈了。这些归根到底就一条:干得不爽。
  3. 2021 年最佳 JavaScript 框架
  4. JS ||(或运算)详解
  5. 计算机三级标题,计算机三级考试题目
  6. 三年级下册计算机课程工作计划,三年级下册信息技术教学工作计划
  7. python装饰器模式带参数_python 装饰器模式 我的理解
  8. 广义表的长度和深度怎么算_最新详细个人所得税税率表!快看最新个人所得税怎么算!...
  9. java垃圾回收 分代_Java-垃圾回收机制-通用的分代垃圾回收机制
  10. 在Altium Designer中利用阵列粘贴功能快速绘制元器件封装