• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

kangye

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

浅谈MVCWebApi

Web API:仅仅提供了一个轻量级的Http请求响应框架,返回的结果在MVCWebApi中有两种:1.xml 2.Json

  

一般选择json:json轻量级,在js中好解析

  

	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();
            }

  

 

posted on 2017-03-27 22:21  kangye  阅读(568)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3