Web API:仅仅提供了一个轻量级的Http请求响应框架,返回的结果在MVCWebApi中有两种:1.xml 2.Json
MVCWebApi提供了一套http的url供外部访问,
为什么要引用这个呢?
是因为外部程序访问我们的数据库是不安全的,外部程序直接访问数据库,就相当于我去你的口袋里面掏钱,不安全。
我要钱,你就从自己口袋里面拿钱给我,我要五块钱,你就给我五块钱。
一个系统访问另一个系统,开一个api供你调用。
例如:上新浪网,左边有一个财经频道,财经频道有一个点数,花波浪线的,(也就是炒股),会发现波浪线在变化,新浪不可能拿到每只股票的波动情况,
股票交易所才有这些数据。新浪网要拿一只股票的数据要通过人家的系统转接过来,不能直接访问股票交易所的数据库,不安全,股票交易所开一套系统出来
可能用的就是Api(打一比方),想要哪只股票,传股票编号过来,我就把股票的数据从数据库拿出来给你。
天气预报也是这样的。
建一个Web Api项目,
会在Controllers下面看见有Home和Values两个控制器,Home控制器继承Controller,Values控制器继承APIController,所以说MVC普通控制器和Api控制器可以共存。
特点:
①必须继承APIController
②如果想要访问webapi则必须注册webapi的路由规则(网站建好以后自动注册)
③访问mvc webapi是通过当前http请求的方法来查找对应的action的(只要前缀匹配get或者post即可)
在Global里面的Application_Start方法中注册webapi路由规则
WebApiConfig文件下有一个Register方法,有name默认DefaultApi,
routeTemplate(路由的模板)默认api/{controller}/{id}
web api是没有视图的
靠方法参数来区分调用哪个方法。
web api默认返回的xml格式。
把返回格式由xml改成json:
将xml格式移除则就是json格式返回:config.Formatters.Remove(config.Formatters.XmlFormatter);把XmlFormatter移除就剩下JsonFormatter。
Post方法:页面把数据提交给web api,在有web api提交给数据库。
这种设计方式分层,也就是说页面仅仅是动态网站开发端,业务逻辑专门有一套web api做操作。
好处:一套业务逻辑(web api)在安卓上可以用,在网站上也可以用,写一套业务端,都可以来调用。
坏处:安卓上是这样访问的,ios是需要变化,逻辑变了,就不能用了,按照业务逻辑来决定了。
分两块:
1、 如果数据是由我提供的:应该开一个MVCWebApi,此系统中具有哪些url应该根据业务逻辑来解决
2、如果调用人家的WebApi呢:则使用WebRequest和WebResponse进行请求响应获取远程数据以后进行处理即可
当我调用人家的MVCWebApi:
//1.0构造一个请求对象
string webapi = "http://localhost:2670/api/values/GetUsers";
WebRequest request = WebRequest.Create(webapi);
request.Method = "get";
//2.0发出请求服务器的响应
WebResponse response = request.GetResponse();
//获取响应报文体中的数据
System.IO.Stream stream = response.GetResponseStream();
//3.0将stream中的流转换成UTP-8格式字符串
string resultString = "";
using (System.IO.StreamReader sr=new System.IO.StreamReader(stream))
{
//将sr中的byte字节转换成字符串
resultString = sr.ReadToEnd();
}