Web API属于ASP.NET核心平台的一部分,它利用MVC框架的底层功能方便我们快速的开发部署WEB服务。

我们可以在常规MVC应用通过添加API控制器来创建web api服务,

普通MVC应用程序控制器根据用户请求的action方法返回ActionResult,

而web api服务返回的则是json封装的模型数据。

和MVC控制器通过URL选择action方法不同,

API控制器根据HTTP请求方法的不同来选择API控制器方法。
API控制器方法的命名规则一般是HTTP方法作为前缀加上控制器的名称,比如GetReservation(这只是常规做法,DoGetReservation、ThisIsTheGetAction都是允许的),

我们从浏览器访问/api/reservation所用的HTTP方法为GET,

API控制器会查找所有包含GET的所有控制器方法,GetReservation和GetAllReservations都在考虑之类,但是具体选择哪个还参考了所带的参数,访问/api/reservation没有任何参数,因此API控制器选择了GetAllReservations,访问/api/reservation/3自然就选择了GetReservation。

由此我们也知道PostReservation、PutReservation、DeleteReservation分别对应HTTP的Post、Put、Delete三种方法(WEB API的Representation State Transfer - REST)。

一个完整的API控制类类似:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace MvcApplication1.Controllers
{
    public class ValuesController1 : ApiController
    {
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

// GET api/<controller>/5
        public string Get(int id)
        {
            return "value";
        }

// POST api/<controller>
        public void Post([FromBody]string value)
        {
        }

// PUT api/<controller>/5
        public void Put(int id, [FromBody]string value)
        {
        }

// DELETE api/<controller>/5
        public void Delete(int id)
        {
        }
    }
}

从框架的本质区别:

用上区分,mvc主要用于建站web api主要用于构建http服务,当然你非要用mvc来构建Uri式的Api也行,不过显然是没有这个必要的,一个不恰当的比喻就像是你也可以玩破解版的单机游戏,也可以通过平台进行联机,但是始终不如steam上来得爽是吧。

自身实现上区分的话,两种框架主要是在Asp .Net的基础上进行改造,主要是对HttpModuleHttpHandler做了扩展,实现方法是不一样的,比如说前者更像是在一层上建了第二层,引伸出更强大的路由机制,实现了诸如MvcHandlerControllerFactory这种消息处理和后台控制器方法选择机制,Web Api除了扩展了前者以外,另外写出了一套独立的,独立于Asp .Net的消息处理管道,就像是借鉴原来房子的模型,重新设计出了另外一套别墅。这也很好地解释了为什么Web Api可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web HostSelf Host方式,这和WCF是相似的。而MVC只能寄宿于IIS上(不考虑.net core),就像Webform的寄宿方式。何况它们两者虽然都有ControllerAction,但是请求的实现和响应的回复机制也是不同的,比如说Web Api处理消息有两个核心类是HttpRequestMessageHttpResponseMessage。这两种框架最多只能说是模式上类似,实现上还是有很大差别的。不过两者都是Asp .Net的组成成员,图上表现得很清楚了。

首先,两者的主要解决的问题不同!
MVC的主要使用场景在于Web站点的开发,他在后端实现了一套完整的MVC开发框架,能提供方便的页面开发,默认使用Razor视图引擎,提供了后端html构造,用户可以方便地开发出带页面的站点。

而WebAPI主演提供了一套RestfulAPI的开发框架,提供了较为完整的http语义支持,主要用来做开放API,更抽象,更不注重View的生成。

从实现的角度看,虽然他俩捆绑在一起,但是两者处理管线还是不同的。
如果你对http有较为深入理解后,你就会发现,其实他俩的界限没那么明显,那么你也许会觉得mvc做的事webAPI都能做,因为他更抽象,有时候你又不想把两者的界限搞得那么清晰

Web API与MVC控制器的区别相关推荐

  1. java bearer token_从Web API在MVC中存储Bearer Token的位置

    我设法提出了一些我觉得可以很好用的东西 . 我正在使用Owin Middleware进行Cookie身份验证 . 在MVC应用程序中,我有一个Owin Startup文件,其中配置了Cookie身份验 ...

  2. 什么是MVC和Web Api,以及他们两者的区别!

    一.什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示 ...

  3. Asp.Net中WebForm与MVC,Web API模式对比

    webform,web mvc和web api都是asp.net官方的三套框架,想对比下三者的关系,查了下资料,web api跟web mvc基本同属一脉,只是mvc多了一个视图渲染,网上有些博客介绍 ...

  4. [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API

    问题 怎么样将 Asp.Net Web Api 加入到现有的 Asp.Net MVC 项目中 解决方案 在 Visual Studio 2012 中就已经把 Asp.Net Web Api 自动地整合 ...

  5. ASP.NET Web API 控制器创建过程

    前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病去如抽丝.这两天状态才好了一点,让我理解了什么才是革命 ...

  6. asp.net MVC 5 及 Web API修改日期格式

    在Asp.net MVC 5 (目前我用的是5这个版本) 中. Web API 和MVC 是两个独立的体系. 很多时候为了解决一个问题查来查去, 方案很多就是不管用. 后来才恍然大悟. 原来是两个体系 ...

  7. Asp.Net Web API(一)

    什么是Web API HTTP不仅仅服务于Web Pages.他也是一个创建展示服务和数据的API的强大平台.HTTP是简单的,灵活的,无处不在的.你能够想象到几乎任何的平台都会有HTTP服务库.HT ...

  8. WCF VS Web API

    微软官方链接:https://docs.microsoft.com/en-us/dotnet/framework/wcf/wcf-and-aspnet-web-api? 基本名词解释 SOAP: &q ...

  9. ASP.NET Web API自身对CORS的支持:从实例开始

    在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中我们通过自定义的HttpMessageHandler为ASP.NET Web API赋予了跨域资源共享的能力,具体来 ...

最新文章

  1. php reids的geo功能,Redis GEO相关命令和功能,你造吗?
  2. Ansible管理节点过多导致的超时问题解决方法
  3. 14行代码AC——1017 A除以B (20分)(大数运算+讲解)
  4. 阿里P8架构师谈:java架构师面试技能24全点
  5. jQuery鼠标事件整理
  6. 【探路者】10月16日立会报告(团队第1周-第3次)
  7. 高中数学如何考120以上高中数学如何快速提高
  8. 色彩专题(PS的颜色理论)
  9. Steam 游戏服务器IP地址段
  10. JavaScript三种弹出框(alert、confirm、prompt),一次性全弄清!
  11. 高通平台DDR3初始化
  12. 渗透扫描工具Nmap下载、安装和使用
  13. 营销玩法|世界杯期间产品如何提高互动性?
  14. 【IoT】物联网NB-IoT之移动oneNET平台简析
  15. [项目管理-19]:在项目管理中, 如何用Jira对项目管理中的所有活动进行结构化、数字化和量化?
  16. 使用adb命令将手机和至电脑上的文件互传
  17. 房地产销售一直不开单?看看销售冠军的逼单话术
  18. 宏信证券手机网上开户流程
  19. Excel锁定单元格【转帖】
  20. S5_笔记(树,二叉树)

热门文章

  1. 京东虚拟业务多维订单系统架构设计读后感
  2. Oracle回滚当前循环,oracle查看回滚段
  3. 树莓派构建内网域名访问php/python 多个虚拟web主机 bind9 nginx flask uwsgi pfm php7 python3
  4. 谷歌云服务器如何通过Putty/SecureCRT远程登录
  5. 社群运营的11个小技巧
  6. 使用node的辅助开发工具
  7. 6·18当当IT书籍大酬宾,400减200,优惠码再减40
  8. 网络安全应急响应-终端检测与响应技术
  9. 华为鸿蒙 HarmonyOS 2 正式发布
  10. mac mini php开发,苹果就不让你升级!新版mac mini真机详细拆解+解析(图)