ASP.NET Web API 开篇示例介绍

简介:

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
2
3
4
5
6
7
8
9
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

1
2
3
4
5
6
7
8
9
10
11
12
13
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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还真是无路可走。已看完前三章,收获颇多知识点很全面,在后面我学习到一些都会写出来跟大家分享。






     本文转自jinyuan0829 51CTO博客,原文链接:http://blog.51cto.com/jinyuan/1534367,如需转载请自行联系原作者







相关文章
|
16天前
|
开发框架 监控 .NET
Visual Basic的Web服务和REST API开发指南
【4月更文挑战第27天】本文探讨了使用Visual Basic(VB.NET)构建Web服务和RESTful API的方法。首先介绍了Web服务的基础和REST API的概念,然后阐述了.NET Framework与.NET Core/.NET 5+对VB.NET的支持,以及ASP.NET Core在Web开发中的作用。接着,详细讲解了创建RESTful API的步骤,包括控制器与路由设置、模型绑定与验证,以及返回响应。此外,还讨论了安全措施、测试方法、部署选项和监控策略。最后强调,VB.NET开发者可以通过ASP.NET Core涉足现代Web服务开发,拓宽技术领域。
|
1月前
|
API 网络安全 数据安全/隐私保护
.NET邮箱API发送邮件的方法有哪些
本文介绍了.NET开发中使用邮箱API发送邮件的方法,包括SmtpClient类发送邮件、MailMessage类创建邮件消息、设置SmtpClient属性、同步/异步发送、错误处理、发送HTML格式邮件、带附件邮件以及多人邮件。AokSend提供高触达发信服务,适用于大规模验证码发送场景。了解这些技巧有助于开发者实现高效、可靠的邮件功能。
|
3月前
|
IDE Java API
使用Java Web技术构建RESTful API的实践指南
使用Java Web技术构建RESTful API的实践指南
|
3月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
41 0
|
13天前
|
弹性计算 JSON Shell
基于Web API的自动化信息收集和整理
【4月更文挑战第30天】
20 0
|
16天前
|
开发框架 缓存 前端开发
利用Visual Basic构建高效的ASP.NET Web应用
【4月更文挑战第27天】本文探讨使用Visual Basic与ASP.NET创建高效Web应用的策略,包括了解两者基础、项目规划、MVC架构、数据访问与缓存、代码优化、异步编程、安全性、测试及部署维护。通过这些步骤,开发者能构建出快速、可靠且安全的Web应用,适应不断进步的技术环境。
|
4天前
|
XML 开发框架 .NET
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
|
15天前
|
JSON 安全 API
【专栏】四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
|
17天前
|
缓存 前端开发 API
toapi,一个强大的 Python Web API库!
toapi,一个强大的 Python Web API库!
27 5
|
25天前
|
JSON API 数据库
解释如何在 Python 中实现 Web 服务(RESTful API)。
在Python中实现Web服务(RESTful API)涉及选择框架(如Flask、Django、FastAPI),定义路由及处理函数(对应HTTP请求方法),处理请求,构建响应和启动服务器。以下是一个使用Flask的简单示例:定义用户列表,通过`@app.route`装饰器设置GET和POST请求处理函数,返回JSON响应,并用`app.run()`启动服务器。实际API会包含更复杂的逻辑和错误处理。
16 1