android移动开发学习笔记(二)神奇的Web API

本文介绍了如何在Android应用中调用Web API,包括新建WebAPI项目,理解GET和POST方法,Json数据格式的使用,以及Android端调用Web API的Get和Post方法。重点讲述了在Android端进行接口调用时的Json反序列化和Token过期处理策略。
摘要由CSDN通过智能技术生成
本次分两个大方向去讲解Web Api,1、如何实现Web Api?2、如何 Android端如何调用Web Api?对于Web Api是什么?有什么优缺点?为什么用WebApi而不用Webservice?这些问题都不去解答,百度一下,关于这方面的资料很多,就不再去啰嗦。

一、如何在web端实现WebApi

(1)如何新建一个WebApi?

在上一章中,讲到我们项目用的是.net 4.5,开发工具是Visual Studio 2012,在Visual Studio 2012中新建MVC4项目,选择Web API,然后项目生成,如下图一、图二、图三所示, 和普通的MVC项目相比,它继承了ApiController,然后我们运行一下项目,在浏览器里输入http://localhost:56091/api/values/get?id=5,如图四所示,即成功调用了项目默认写的Get方法实例,有数据返回即表示调用成功!

data-cke-saved-src=/uploadfile/Collfiles/20140905/20140905091104233.png

(图一)

data-cke-saved-src=/uploadfile/Collfiles/20140905/20140905091105234.png

(图二)

data-cke-saved-src=/uploadfile/Collfiles/20140905/20140905091105235.png

(图三)

data-cke-saved-src=/uploadfile/Collfiles/20140905/20140905091105236.png

(图四)

(2)Get和Post数据?

(2.1) Get方法

具体什么是Get就不再啰嗦了,可以自己百度查看, 使用 [HttpGet]标识,当然也可以不用加,只需要方法名用Get开头,Get方法是使用Url参数传递的,不能接收实体参数,如:http://localhost:56091/api/values/get?id=5,id即是参数,当然也可以多参数,如:http://localhost:56091/api/values/get?id=5&name=tim ,默认参数使用[FromUri]

Get是有长度限制的,参数不能过多,而且参数暴露在外面,容易被人很方便的截取。

(2.2)Post方法

使用 [HttpPost]方式传递,当然也可以不用加,只需要方法名用Post开头,Post方法可以使用Url传递参数,也可以用Body传递参数,默认参数使用[FromUri],可以加[FromBody]接收body里传递的参数,但是有问题的是,我使用[FromBody]方式,参数为空,根本接收不动值,上网查了资料,很多人遇到问题,不知道是不是Web Api本身的问题,无奈只好使用下面最原始的方式了,获取Body的值了。

?
1
2
3
4
5
6
7
HttpContextBase context = (HttpContextBase)Request.Properties[MS_HttpContext]; //获取传统context
HttpRequestBase request = context.Request; //定义传统request对象
string name = request.Form.Keys[ 0 ];
if (name == null )
{
     name = request.Form[ 0 ];
}

另外Post的方法不能直接在浏览器里敲地址获取数据,调试起来不是很方便,所以用了一个工具,火狐浏览器可以安装一个插件,叫Poster,如下图六所示,测试起来很方便。

 

data-cke-saved-src=/uploadfile/Collfiles/20140905/20140905091105237.png

(图五)

data-cke-saved-src=/uploadfile/Collfiles/20140905/20140905091105238.png

(图六)

(3)Json数据格式?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

Json数据格式传输是目前接口数据传输主流,本次我们的项目也是使用Json格式数据,我们所有的接口参数都是统一的参数名,后面跟的是Json格式字符串,如:http://localhost:8010/api/MobileInfo/Get_Welcome? params=JsonString,这是接口的调用,接口返回结果也是Json格式。

如下图七所示,使用Newtonsoft.Json类库,这是VS项目集成的类库,可以很方便的使用JsonConvert.SerializeObject(value)方法,将object对象转换为Json格式。

data-cke-saved-src=/uploadfile/Collfiles/20140905/20140905091106239.png

(图七)

?
1
2
3
//step2:参数反序列化
T transferObj = default (T);
transferObj = Newtonsoft.Json.JsonConvert.DeserializeObject<t>(JsonString);</t>

 

(4) 路由的配置

如下图八所示,默认路由配置是这样,只会找到Controller,不用根据Action去分配地址,所以相同Controller下只会找到Get方法或Post方法,不管你方法名是否相同,这样很明显不能满足我们的需求,如果想以Action去标识地址,就用下面代码配置:

?
1
2
3
4
5
config.Routes.MapHttpRoute(
     name: CommonApi,
     routeTemplate: api/{controller}/{action}/{id},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值