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

  1. namespace Common
  2. {
  3. public class Product
  4. {
  5. public string ProductID { get; set; }
  6. public string ProductName { get; set; }
  7. public string ProductCategory { get; set; }
  8. }
  9. }

建立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

  1. using System.Web.Http;
  2.  
  3. namespace WebHost
  4. {
  5. public class Global : System.Web.HttpApplication
  6. {
  7. protected void Application_Start(object sender, EventArgs e)
  8. {
  9. GlobalConfiguration.Configuration.Routes.MapHttpRoute(
  10. "DefaultAPI", "api/{controller}/{id}", new { controller="product",id = RouteParameter.Optional });
  11. }
  12. }
  13. }

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

代码1-3

  1. using System.Web.Http;
  2. using Common;
  3.  
  4. namespace WebHost.Controllers
  5. {
  6. public class ProductController:ApiController
  7. {
  8. private static List<Product> products;
  9.  
  10. static ProductController()
  11. {
  12. products = new List<Product>();
  13. products.AddRange(
  14. new Product[]
  15. {
  16. new Product(){ ProductID="", ProductName="牙刷",ProductCategory="洗漱用品"},
  17. new Product(){ ProductID="", ProductName="《.NET框架设计—大型企业级应用框架设计艺术》", ProductCategory="书籍"}
  18. });
  19. }
  20.  
  21. public IEnumerable<Product> Get(string id = null)
  22. {
  23. return from product in products where product.ProductID == id || string.IsNullOrEmpty(id) select product;
  24. }
  25. }
  26. }

在代码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

  1. using System.Web.Http;
  2. using System.Web.Http.SelfHost;
  3.  
  4. namespace SelfHost
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. HttpSelfHostConfiguration selfHostConfiguration =
  11. new HttpSelfHostConfiguration("http://localhost/selfhost");
  12. using (HttpSelfHostServer selfHostServer = new HttpSelfHostServer(selfHostConfiguration))
  13. {
  14. selfHostServer.Configuration.Routes.MapHttpRoute(
  15. "DefaultApi", "api/{controller}/{id}", new { id=RouteParameter.Optional});
  16.  
  17. selfHostServer.OpenAsync();
  18.  
  19. Console.WriteLine("服务器端服务监听已开启");
  20. Console.Read();
  21. }
  22. }
  23. }
  24. }

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

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

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

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

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

代码1-5

  1. using System.Web.Http;
  2. using Common;
  3.  
  4. namespace SelfHost.Controllers
  5. {
  6. public class ProductController:ApiController
  7. {
  8. private static List<Product> products;
  9.  
  10. static ProductController()
  11. {
  12. products = new List<Product>();
  13. products.AddRange(
  14. new Product[]
  15. {
  16. new Product(){ ProductID="", ProductName="牙刷",ProductCategory="洗漱用品"},
  17. new Product(){ ProductID="", ProductName="《.NET框架设计—大型企业级应用框架设计艺术》", ProductCategory="书籍"}
  18. });
  19. }
  20.  
  21. public IEnumerable<Product> Get(string id = null)
  22. {
  23. return from product in products where product.ProductID == id || string.IsNullOrEmpty(id) select product;
  24. }
  25.  
  26. public void Delete(string id)
  27. {
  28. products.Remove(products.First(product => product.ProductID == id));
  29. }
  30.  
  31. public void Post(Product product)
  32. {
  33. products.Add(product);
  34. }
  35.  
  36. public void Put(Product product)
  37. {
  38. Delete(product.ProductID);
  39. Post(product);
  40. }
  41. }
  42. }

对于在代码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

  1. using Common;
  2. using System.Net.Http;
  3.  
  4. namespace Client
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. AsyncProcess();
  11. Console.Read();
  12. }
  13.  
  14. private async static void AsyncProcess()
  15. {
  16. HttpClient httpClient = new HttpClient();
  17.  
  18. //获取货品信息列表
  19. HttpResponseMessage responseMessage =
  20. await httpClient.GetAsync("http://localhost/selfhost/api/product");
  21. IEnumerable<Product> products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();
  22. OutputProductInfo(products);
  23.  
  24. //添加货品
  25. Product product = new Product()
  26. {
  27. ProductID = "",
  28. ProductName = "《ASP.NET Web API 2 框架揭秘》",
  29. ProductCategory = "食品类"
  30. };
  31. await httpClient.PostAsJsonAsync<Product>("http://localhost/selfhost/api/product", product);
  32. responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product");
  33. products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();
  34. OutputProductInfo(products);
  35.  
  36. //修改指定货品信息
  37. responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product/003");
  38. product = (await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>()).First();
  39. product.ProductCategory = "书籍";
  40. await httpClient.PutAsJsonAsync<Product>("http://localhost/selfhost/api/product", product);
  41. responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product");
  42. products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();
  43. OutputProductInfo(products);
  44.  
  45. //删除指定货品
  46. await httpClient.DeleteAsync("http://localhost/selfhost/api/product/001");
  47. responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product");
  48. products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();
  49. OutputProductInfo(products);
  50.  
  51. }
  52.  
  53. private static void OutputProductInfo(IEnumerable<Product> products)
  54. {
  55. foreach (Product product in products)
  56. {
  57. Console.WriteLine(
  58. "ProductID:{0},ProductName:{1},ProductCategorm:{2}",
  59. product.ProductID, product.ProductName, product.ProductCategory);
  60. }
  61. Console.WriteLine("—————————————————————————");
  62. }
  63. }
  64. }

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

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

图3

图4

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

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

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

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

作者:金源

出处:http://www.cnblogs.com/jin-yuan/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

ASP.NET Web API 开篇示例介绍的更多相关文章

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

    ASP.NET Web API 路由对象介绍 前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了 ...

  2. C#版ASP.NET Web API使用示例

    为更好更快速的上手Webapi设计模式的接口开发,本文详细解释了在Web API接口的开发过程中,我们可能会碰到各种各样的问题总结了这篇,希望对大家有所帮助. 1:在接口定义中确定MVC的get或者P ...

  3. ASP.net Web API综合示例

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

  4. ASP.NET Web API 入门示例详解

    REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...

  5. ASP.NET Web API使用示例

    原文地址:https://blog.csdn.net/chinacsharper/article/details/21333311 上篇博客讲解rest服务开发时,曾经提到过asp.net mvc中的 ...

  6. ASP.NET Web API 控制器创建过程(一)

    ASP.NET Web API 控制器创建过程(一) 前言 在前面对管道.路由有了基础的了解过后,本篇将带大家一起学习一下在ASP.NET Web API中控制器的创建过程,这过程分为几个部分下面的内 ...

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

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

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

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

  9. ASP.NET Web API 管道模型

    ASP.NET Web API 管道模型 前言 ASP.NET Web API是一个独立的框架,也有着自己的一套消息处理管道,不管是在WebHost宿主环境还是在SelfHost宿主环境请求和响应都是 ...

随机推荐

  1. C# 发送邮件 附件名称为空

     示例代码: // 1.创建邮件 MailMessage mailMsg = new MailMessage(); mailMsg.To.Add(new MailAddress("test@ ...

  2. Velocity笔记--使用Velocity获取动态Web项目名的问题

    以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...

  3. js参数arguments的理解

    原文地址:js参数arguments的理解 对于函数的参数而言,如下例子 function say(name, msg){ alert(name + 'say' + msg); } say('xiao ...

  4. VICA 架构设计(1)

    本文记录最近完成的一个通用实时通信客户端的架构.   背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...

  5. Newtonsoft.Json设置类的属性不序列化

    参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...

  6. 我理解的MVC

    前言 前一阶段对MVC模式及其衍生模式做了一番比较深入的研究和实践,这篇文章也算是一个阶段性的回顾和总结. 经典MVC模式 经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的 ...

  7. 编译器开发系列--Ocelot语言1.抽象语法树

    从今天开始研究开发自己的编程语言Ocelot,从<自制编译器>出发,然后再自己不断完善功能并优化. 编译器前端简单,就不深入研究了,直接用现成的一款工具叫JavaCC,它可以生成抽象语法树 ...

  8. Atitit.软件开发的三层结构isv金字塔模型

    Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...

  9. docker4dotnet #1 – 前世今生 & 世界你好

    作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连p ...

  10. Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映

    前言: 如果你已经厌倦了使用PPT设置路径.设置时间.设置动画方式来制作动画特效.那么Impress.js将是你一个非常好的选择. 用它制作的PPT将更加直观.效果也是嗷嗷美观的. 当然,如果用它来装 ...