Asp.Net中WebForm与MVC,Web API模式对比
webform,web mvc和web api都是asp.net官方的三套框架,想对比下三者的关系,查了下资料,web api跟web mvc基本同属一脉,只是mvc多了一个视图渲染,网上有些博客介绍了webform和mvc底层源码实现的不同,但不够直观简洁,博客园有一篇博客,很简洁的说明的两者的关系,出于学习和记录的原因,进行了复制转载
http://www.cnblogs.com/chay1227/archive/2013/03/11/2953301.html
Asp.net Web开发方式,分为两种:
1. WebForm开发
2. Asp.Net MVC开发
MVC是微软对外公布的第一个开源的表示层框架,MVC目的不是取代WebForm开发,只是web开发的另一种选择。两者最本质区别是请求url不同,MVC是将请求交给控制器处理,而WebForm是将请求交给请求页的后台文件(.cs文件的Page_Load)处理。
MVC优点:
1. 很容易将复杂的应用分成M、V、C三个组件模型,通过model、view、controller有效的简化了复杂的架构,将处理后台逻辑代码与前台展示逻辑进行了很好的分离。
2. 因为没有使用server-based forms,所以程序员控制的会更加灵活,页面更加干净,没有viewstate。
3. 通过修改路由规则,可以控制生成自定义的url,因此控制生成seo友好的url将更加容易。
4. 强类型view实现,更安全,更高效。
WebForm优点:
1. 支持事件模型开发。有丰富的服务器端组件。
2. 控件丰富
WebForm缺点:
1. 封装太强,很多底层东西让初学者不是很明白,
2. 自定义控制不灵活,
3. ViewState处理。
作者:龙Ryze
链接:https://www.zhihu.com/question/46369458/answer/144963042
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
"WebApi和MVC有什么区别?"
首先要重点说的是,Web API是一种无限接近于RESTful风格的轻型框架,且不是微软提出来的,微软在.NET上实现了这中框架—http://Asp.Net Web API,所以“微软包装”是一个极大的偏见。
我在公司经历了从 MVC 转到 “Web API + 其他框架”的过程,为什么要这么做?
从需求的根本上来看,业务的布局和扩张导致是根本原因。我们要求,数据库数据不只能够对 Web 程序服务,对其他业务也行,甚至可以根据数据接口开放给第三方。例如,MVC 业务中,可以在前端用AJAX获取和更新数据,也可以在后台用 HttpClient, 调用的方式不限,数据格式完全由调用方决定(XML 和 JSON 也是足够了)。
为什么不用 MVC 来做?
MVC 框架负责的东西太多了,我们可以说它是一个重量级的框架,因为它负责了数据接口,逻辑运算和View层的显示,为了减少 Controller 层的代码量,我们甚至还在三层架构上加了 DAL 和 BLL 层。除此之外,MVC 只能运行在 IIS 和 新出来的 DotNetCore 中,宿主选择比较少。
Web API 和 MVC可以说是两个不同的东西。Web API更倾向于基于HTTP协议的服务,直接返回用户的数据请求。MVC是建站的一种框架,倾向于返回用户的页面请求。
我总结了以下 http://ASP.NET Web API 的特性,更能说明Web API是一种数据请求框架:
- http://ASP.NET Web API 可以根据请求报文来返回的相应数据格式。包括JSON和XML。
- http://ASP.NET Web API 单独做数据请求和MVC做页面请求可以让Web前端和后台更好的解耦,减少开发难度。
- Web API 可以更好地用在移动端网页、桌面端网页或者桌面程序,调用方更加多样化。
- Web API 的宿主可以选择多样:WebHost,,ConsoleHost,甚至是windows Services。
作者:潘成涛
链接:https://www.zhihu.com/question/46369458/answer/101099849
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
推荐看看蒋金楠的两本框架揭秘。
使用上区分,mvc主要用于建站,web api主要用于构建http服务,当然你非要用mvc来构建Uri式的Api也行,不过显然是没有这个必要的,一个不恰当的比喻就像是你也可以玩破解版的单机游戏,也可以通过平台进行联机,但是始终不如steam上来得爽是吧。
自身实现上区分的话,两种框架主要是在Asp .Net的基础上进行改造,主要是对HttpModule和HttpHandler做了扩展,实现方法是不一样的,比如说前者更像是在一层上建了第二层,引伸出更强大的路由机制,实现了诸如MvcHandler和ControllerFactory这种消息处理和后台控制器方法选择机制,Web Api除了扩展了前者以外,另外写出了一套独立的,独立于Asp .Net的消息处理管道,就像是借鉴原来房子的模型,重新设计出了另外一套别墅。这也很好地解释了为什么Web Api可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式,这和WCF是相似的。而MVC只能寄宿于IIS上(不考虑.net core),就像Webform的寄宿方式。何况它们两者虽然都有Controller和Action,但是请求的实现和响应的回复机制也是不同的,比如说Web Api处理消息有两个核心类是HttpRequestMessage和HttpResponseMessage。这两种框架最多只能说是模式上类似,实现上还是有很大差别的。不过两者都是Asp .Net的组成成员,图上表现得很清楚了。
Asp.Net中WebForm与MVC,Web API模式对比相关推荐
- MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式
MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式 2015-01-18 00:11 https://www.muhanxue.com/essa ...
- 【转】asp.net中的WebApplication(web应用程序)和WebSite(网站)
[转]asp.net中的WebApplication(web应用程序)和WebSite(网站) web application是MS在发布VS2005之后追加的SP1扩展包里的一种新的Web模式,We ...
- .net mvc web api 返回 json 内容,过滤值为null的属性
原文:http://blog.csdn.net/xxj_jing/article/details/49508557 版权声明:本文为博主原创文章,未经博主允许不得转载..net mvc web api ...
- Android中常见的MVC/MVP/MVVM模式
Android中常见的MVC/MVP/MVVM模式 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Re ...
- 在Asp.net应用程序中构建基于WCF Web.Api的服务
WCF Web API Preview 5 发布了,你可以官方网站下载或通过Nuget安装它. 下面让我们在Asp.net applicatoin中来实现一个非常简单的web api service. ...
- ASP.NET Core 1.0开发Web API程序
.NET Core版本:1.0.0-rc2 Visual Studio版本:Microsoft Visual Studio Community 2015 Update 2 开发及运行平台:Window ...
- flask web api_我使用Express,Flask和ASP.NET重建了相同的Web API。 这是我发现的。
flask web api I've been shopping around for a back end framework to support a tabletop game app, and ...
- 如何在ASP.NET中生成HTML5离线Web应用
传统的Web应用程序有一个很大的症结是当用户的网络连接不好时,应用会加载失败,为了 解决这一问题,HTML5中引入了Web的离线工作的功能.离线功能使得Web应用程序类似于本机应用程序,当断开网络连接 ...
- 使用 ASP.NET Core Razor 页、Web API 和实体框架进行分页和排序
目录 核心类 数据层 The API Razor页面 如何使用 .NET Core Razor 页.Web API 和实体框架实现分页和排序,以产生良好的性能. 该项目的特点是: 选择页面大小(Pag ...
最新文章
- R语言par函数设置图像个数、边界、颜色等实战
- 机器学习(数据挖掘十个重要算法)
- 爬虫推特数据分析的外文文献_13天让你学会爬虫分布式,说到让你做到择推出it届附教程...
- Java 开发环境配置jdk安装教程
- python数据类型--数字、字符串
- JAVA RSA加密解密代码范例(byte[]版)
- NanoPi M1 Plus:Allwinner H3使用lichee源码编译Linux-3.4 BSP
- 机械革命bios升级_¥1500买6年前神舟老战神,3内存+4硬盘升级潜力强,鲁大师15万!...
- 拇指玩安装器提示“存储卡空间不足”的解决办法
- 企业入职测试题目及答案_[企业入职性格测试题以及答案信息] 新员工入职性格测试题...
- 长江学者石照耀剖析精密减速机国产化之路—山坳上的机器人精密减速器
- 中国企业管理软件之殇
- Python学生信息管理系统(增删查改、模糊查找、txt文件输出)# 谭子
- 科学划定“三区三线” 严格保护与合理利用自然资源
- 【Photoshop技巧】两步将黑色图片改变颜色
- 前端上传预览文件以及下载,node后端存储文件以及返回前端文件流下载
- Win10应用商店、应用打不开或闪退的解决方法
- 4-3 使用函数计算两个复数之积 (10分)
- pgr_createTopology
- atcoder AtCoder Beginner Contest 210 D - National Railway(dp)
热门文章
- Linux实战案例(2)实例讲解使用软连接的场景和过程
- API文档工具-Swagger的集成
- uip UDPclient模式通信移植,当地port随机
- 用WebORB实现flex + .net后台的Remoting
- [Leetcode][第336题][JAVA][回文对][暴力][HashSet][字典树]
- 主存和cache每一块相等_CPU中的Cache实现原理
- python3.6 websocket异步高并发_在Python3.6上的websocket客户端中侦听传入消息时出现问题...
- python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。
- linux配置服务器超时退出,Linux下实现不活动用户登录超时后自动登出
- php 自带缓存,封装ThinkPhP自带的缓存机制