一、如何在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方法实例,有数据返回即表示调用成功!
(图一)
(图二)
(图三)
(图四)
(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,如下图六所示,测试起来很方便。
(图五)
(图六)
(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格式。
(图七)
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},
|