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传参

我们刚好看看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 { 
get; 
set; }

6

7         
public 
string UserName { 
get; 
set; }

8

9         
public 
string UserEmail { 
get; 
set; }

10     }

11 }

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

GET数据

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

代码如下。


using System;


using System.Collections.Generic;


using System.Linq;


using System.Net;


using System.Net.Http;


using System.Web.Http;


using WebAPI.Models;

8


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 = 
"
[email protected]
"},

19             
new Users {UserID = 
2, UserName = 
"
Spiderman
", UserEmail = 
"
[email protected]
"},

20             
new Users {UserID = 
3, UserName = 
"
Batman
", UserEmail = 
"
[email protected]
"}

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版本的遇到的问题有没有解决。


//
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":
[email protected]}

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

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

结语

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

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

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

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

DEMO源码下载

参考页面:http://qingqingquege.cnblogs.com/p/5933752.html

时间: 2024-10-10 00:02:38

ASP.NET Web API(一):使用初探,GET和POST数据的相关文章

ASP.NET WEB API 初探

本文初步介绍如何简单创建一个ASP.NET Web Api 程序. Web Api 顾名思义就是一个Api接口,客户端可调用此接口进行业务操作.此类应用与 ASP.NET  web服务(即使用扩展名.asmx的web服务文件)有一定的相似之处,又有大不同, ASP.NET Web Api 主要是基于ASP.NET MVC 框架. 废话少说,现在开始. 我用的开发工具是Visul studio 2015. 1. 创建ASP.NET Web Api 项目. 改项目名称为DRMWebAPI,可得如下项

ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认证. 系列文章列表 ASP.NET Web API(一):使用初探,GET和POST数据ASP.NET Web API(二):安全验证之使用HTTP基本认证ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication) 摘要认证原理 在基本认证的方式中,主

ASP.NET Web API(二):安全验证之使用HTTP基本认证

在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求,所以这篇文章我们先来讨论下安全验证一个最简单的方法:使用HTTP基本认证. HTTP基本认证原理 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份认证的方法,当一个客户端向HTTP服务器进行数据请求时,如果客户端未被认证,则HTTP服务器

ASP.NET Web API 2基于令牌的身份验证

基于令牌的认证 我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户. WEB API使用这样的方法不是很适合,于是就有了基于令牌的认证,使用令牌认证有几个好处:可扩展性.松散耦合.移动终端调用比较简单等等,别人都用上了,你还有理由不用吗? 下面我们花个20分钟的时间来实现一个简单的WEB API token认证: Step 1: 新建一个空的WEB API项目,项目名称就设置为

Asp.Net Web API 2第四课——HttpClient消息处理器

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web API第二课:CRUD操作http://www

使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【开篇】【持续更新中。。。】

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 最近发现web api很火,园内也有各种大神已经在研究,本人在asp.net官网上看到一个系列教程,原文地址:http://bitoftech.net/2013/11/25/detailed-tutorial-building-asp-net-

[转] ASP.NET WEB API程序在VS启动或发布到IIS后启动后发生 - Could not load file or assembly &#39;System.Web.Http.WebHost’异常,无法正常访问

Just do Copy Local = true in the properties for the assembly(System.Web.Http.WebHost) and then do a redeploy, it should work fine. http://stackoverflow.com/questions/20323107/could-not-load-file-or-assembly-system-web-http-webhost-after-published-to-

ASP.NET Web API模型验证以及异常处理方式

ASP.NET Web API的模型验证与ASP.NET MVC一样,都使用System.ComponentModel.DataAnnotations. 具体来说,比如有:[Required(ErrorMessage="")][Range(0, 999)][Bind(Exclude="")][DisplayName("")][StringLength(1024)]... 验证扩展可以看这里:http://dataannotationsextens

asp.net web api帮助文档的说明

为asp.net的mvc web api填写自己的帮助文档 1. 加入Help的area(能够通过命令行或其它方式加入) 命令行:Install-Package Microsoft.AspNet.WebApi.HelpPage NuGet搜索:HelpPage,找到Microsoft asp.net web api help page 2. 为api等加入凝视 3. 生成凝视为xml文件 4. 将xml赋予Help的configuration 在help的config文件里 HelpPageCo