ASP.NET Web API(一):使用初探,GET和POST数据

简介: 概述 REST(Representational State Transfer表述性状态转移)而产生的REST API的讨论越来越多,微软在ASP.NET中也添加了Web API的功能。 我们看dudu的文章HttpClient + ASP.NET Web API, WCF之外的另一个选择知道了博客园也开始使用了Web API,且在使用Web API Beta版本的时候遇到了这个问题:痴情意外:ASP.NET WebAPI RC 竟然不支持最常用的json传参。

概述

REST(Representational State Transfer表述性状态转移)而产生的REST API的讨论越来越多,微软在ASP.NET中也添加了Web API的功能。

我们看dudu的文章HttpClient + ASP.NET Web API, WCF之外的另一个选择知道了博客园也开始使用了Web API,且在使用Web API Beta版本的时候遇到了这个问题:痴情意外:ASP.NET WebAPI RC 竟然不支持最常用的json传参

我们刚好看看Web API的使用,且看目前的版本有没有解决掉这个问题。

而关于ASP.NET Web Forms 4.5的新特性可以参见我之前的文章:

项目建立

在安装了Visual Studio 2012后,我们依次点击新建项目->已安装模板->Web->ASP.NET MVC 4 Web Application新建一个工程项目。

项目模板选择Web API。

在Model里面我们还是添加之前文章里面使用的User类。

 1  namespace WebAPI.Models
 2 {
 3      public  class Users
 4     {
 5          public  int UserID {  getset; }
 6 
 7          public  string UserName {  getset; }
 8 
 9          public  string UserEmail {  getset; }
10     }
11 }

将自动生成的ValueController修改成UsersController。

GET数据

使用HTTP的get方法请求获取数据,整个Web API的请求处理基于MVC框架。

代码如下。

 1  using System;
 2  using System.Collections.Generic;
 3  using System.Linq;
 4  using System.Net;
 5  using System.Net.Http;
 6  using System.Web.Http;
 7  using WebAPI.Models;
 8 
 9  namespace WebAPI.Controllers
10 {
11      public  class UsersController : ApiController
12     {
13          ///   <summary>
14           ///  User Data List
15           ///   </summary>
16           private  readonly List<Users> _userList =  new List<Users>
17         {
18              new Users {UserID =  1, UserName =  " Superman ", UserEmail =  " Superman@cnblogs.com "},
19              new Users {UserID =  2, UserName =  " Spiderman ", UserEmail =  " Spiderman@cnblogs.com "},
20              new Users {UserID =  3, UserName =  " Batman ", UserEmail =  " Batman@cnblogs.com "}
21         };
22 
23          //  GET api/Users
24           public IEnumerable<Users> Get()
25         {
26              return _userList;
27         }
28 
29          //  GET api/Users/5
30           public Users GetUserByID( int id)
31         {
32              var user = _userList.FirstOrDefault(users => users.UserID == id);
33              if (user ==  null)
34             {
35                  throw  new HttpResponseException(HttpStatusCode.NotFound);
36             }
37              return user;
38         }
39 
40          // GET api/Users/?username=xx
41           public IEnumerable<Users> GetUserByName( string userName)
42         {
43              return _userList.Where(p =>  string.Equals(p.UserName, userName, StringComparison.OrdinalIgnoreCase));
44         }
45     }
46 }

构造了一个user list,实现了三个方法,我们下面来做请求。

使用不同的浏览器请求的过程中会发现返回的格式不一样。

先使用Chrome请求,我们发现HTTP Header里面的Content-Type是xml类型。

我们再换FireFox请求,发现Content-Type还是xml类型。

我们再使用IE请求,发现是这样。

打开保存后的文件,我们发现请求到的数据是JSON格式。

造成这样的差异的原因是:不同的浏览器发送的Request Header里面的Content-Type不一致造成的。

我们可以使用Fiddler验证一下。

Content-Type:text/json

Content-Type:text/xml

POST数据

实现一个User添加的功能,接受的类型为User实体,而我们POST的数据为对应的JSON数据,看看dudu在Beta版本的遇到的问题有没有解决。

 1  // POST api/Users/Users Entity Json
 2  public Users Add([FromBody]Users users)
 3 {
 4      if (users ==  null)
 5     {
 6          throw  new HttpRequestException();
 7     }
 8     _userList.Add(users);
 9      return users;
10 }

我们还是使用Fiddler进行模拟POST数据。

在POST请求前,我们先将代码附加到进程里面,并在Add方法处设置断点。

在Visual Studio 2012中,debug HOST的程序变成了IIS Express。

我们使用Ctrl+ALT+P,附加到它的进程里面。

下面使用Fiddler进行模拟POST。

注意在Request Header里面的Content-Type为text/json,POST的json内容为:

1 {"UserID":4,"UserName":"Parry","UserEmail": Parry@cnblogs.com}

点击Execute后,跳到了我们前面设置的断点处,我们看看提交过来的数据。

这样dudu在Beta里面遇到的问题已解。

结语

ASP.NET框架一路发展而来,的确功能做的越来越强大、方便。希望我们能摒弃语言的争论,回归纯粹的技术讨论上来,都说微软的技术变化太快,变的本质是什么呢?难道不变就是好的吗?

第二部分我们将一起看一看Web API里面的一些安全验证的问题。

有所错误之处,望指出、讨论。

喜欢的话,点个推荐是对文章最好的肯定。 :)

DEMO源码下载


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
4月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
76 0
|
4月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
39 0
|
7月前
|
存储 开发框架 前端开发
asp.net与asp.net优缺点及示例
asp.net与asp.net优缺点及示例
|
7月前
|
IDE 大数据 Java
大数据问题排查系列 - HDFS FileSystem API 的正确打开方式,你 GET 了吗?
大数据问题排查系列 - HDFS FileSystem API 的正确打开方式,你 GET 了吗?
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
XML 自然语言处理 前端开发
NLP自学习平台提供了API接口调用服务,这些接口可以通过HTTP GET请求进行调用
【2月更文挑战第7天】NLP自学习平台提供了API接口调用服务,这些接口可以通过HTTP GET请求进行调用
24 2
|
3月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
72 0
|
4月前
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
32 0
|
存储 开发框架 .NET
Asp.net就业课之Ado.net第一次课
Asp.net就业课之Ado.net第一次课
21 0
|
JSON 开发框架 .NET
ASP.NET Core Web API设置响应输出的Json数据格式的两种方式
ASP.NET Core Web API设置响应输出的Json数据格式的两种方式