最近做了很多项目,也同时使用了mvc的接口,webapi的接口,以及webservice 的接口。先两两对比如下:

mvc和webapi区别:

1、MVC是建站的一种框架,倾向于返回用户的页面请求;api倾向于返回用户数据请求;

2、mvc直接继承System.Web.Mvc.Controller; 而webapi继承的是System.Web.Http.ApiController

3、MVC只能部署到IIS上,而webapi可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式
4、接参数方式不一样:
mvc接口不管是get请求还是post请求都可以在方法名后面接参数形式,或者直接接对象方式,但是webapi接参数方式有点复杂,get请求也可以直接在方法后面接到参数。
但是post请求

(1)1个参数的时候,可以用

$.ajax({
type: "post",
url: "http://localhost:111/api/MyApi/SaveData",
data: { "": "test" },
success: function (data, status) {}
});

  接口里面用如下方式接受

[HttpPost]
public bool SaveData([FromBody]string NAME)
{
return true;
}

(2)两个以及两个以上的参数,是不能用方法明后加参数形式直接接收。

可以用实体方式(这种方法比较推荐。因为在手机端调用接口的时候更好的使用)

5、返回结果的区别:
  mvc返回System.Web.Mvc.JsonResult(return Json(model, System.Web.Mvc.JsonRequestBehavior.AllowGet)),在前段可以直接使用;而webapi想要直接使用,需要返回JsonObject,否则需要json.parse(obj)转化

private JsonObject ModelToJson(Result result)
{
JsonObject obj = new JsonObject();
obj.Accumulate("code", result.code);
obj.Accumulate("message", result.message);
return obj;
}

备注:

1、在新建webapi的时候,必须要添加webapi 控制器类。。不能直接新建个类,,然后改成继承ApiController,否则是无效的webapi.

2、JsonObject 来源于 Maticsoft.Json.dll

其实用的多了。就会感觉两个并没有太大的区别。但是如果你只是为了处理数据的话,采用webapi是比较好的选择,因为 MVC 框架负责的东西太多了,我们可以说它是一个重量级的框架,而webapi是个轻量级的框架。

webservice 和webapi区别:

1、webservice是基于SOAP协议的,数据格式是XML,webapi遵循的http协议,它的Response可以被而Web API的MediaTypeFormatter转换成Json、XML 或者任何你想转换的格式。
2、webservice它只能部署在IIS上,而webapi可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式
3、webservice 也可以通过ajax访问:

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下 行。
[System.Web.Script.Services.ScriptService]
但是需要注意的是:传参数方面的区别:
data: "{'paraStu':{'NAME':'测0813','SEX':'男'}}",
而webapi的参数;
data: {'NAME':'测0813','SEX':'男'},

  也就是webservice在data里面必须用参数名paraStu进行赋值,而webapi和mvc模式下的是不需要的。两者都可以直接用实体接参数

4、webapi无状态,相对webservice更轻量级。webapi支持如get,post等http操作,并且对限制带宽的设备,比如智能手机等支持的很好

这样对比的话webservice貌似并不好用。但是我们为什么要用它呢,理由如下:

1、很好的跨编程语言和跨操作系统
2、可移植性:传统的WebService只是利用了HTTP通道,进行独立的交互,但是这个交互协议可以移植到其他协议下运作

所以综上所述。MVC接口、webapi、webservice三者各有优缺点,在实际应用中,要综合考虑自己的实际用途,选择最合适的实现方式,可以事半功倍。

mvc接口、webapi、webservice 对比的更多相关文章

  1. AutoFac mvc和WebAPI 注册Service (接口和实现)

    AutoFac  mvc和WebAPI  注册Service (接口和实现) 1.准备组件版本:Autofac 3.5.0    Autofac.Integration.Mvc 3.3.0.0  (I ...

  2. 给Asp.Net MVC及WebApi添加路由优先级

    一.为什么需要路由优先级 大家都知道我们在Asp.Net MVC项目或WebApi项目中注册路由是没有优先级的,当项目比较大.或有多个区域.或多个Web项目.或采用插件式框架开发时,我们的路由注册很可 ...

  3. SlickOne -- 基于Dapper, Mvc和WebAPI 的快速开发框架

    前言:在两年前,项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实践和应用,今再次对SlickOne项目做以回顾和总结.其目的是精简,持续改进,保持重 ...

  4. C# MVC+EF—WebApi

    上一篇搭建了页面,这里写下功能. 这里我用WebApi实现数据的增删改查. 一.新建Controller 为了区分明确,我在Controller文件夹下建立一个WebApi文件夹存放. 选中文件夹右键 ...

  5. autofac解析Mvc和Webapi的坑

    我们在项目中很早就开始使用autofac,也以为知道与mvc和webapi集成的做法. var builder = new ContainerBuilder(); // Mvc Register bu ...

  6. SlickOne敏捷开发框架介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架

    前言:在两年前(最初发布时间:2013年1月9日(csdn),当前文章时间2015年11月10日),项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实 ...

  7. 【转载】为ASP.NET MVC及WebApi添加路由优先级

    路由方面的: 转载地址:http://www.jb51.net/article/73417.htm Author:lijiao 这是一个对Asp.Net Mvc的一个很小的功能拓展,小项目可能不太需要 ...

  8. 转:autofac在mvc和webapi集成的做法

    本文转自:http://www.cnblogs.com/Hai--D/p/5992573.html var builder = new ContainerBuilder(); // Mvc Regis ...

  9. 在MVC或WEBAPI中记录每个Action的执行时间和记录下层方法调用时间

    刚才在博客园看了篇文章,http://www.cnblogs.com/cmt/p/csharp_regex_timeout.html  突然联想到以前遇到的问题,w3wp进程吃光CPU都挂起IIS进程 ...

随机推荐

  1. Ubuntu下关闭防火墙

    默认情况下ubuntu无firewall,除非你自己安装了,怎么装的就怎么删呗. . 假设是已启用的自备的iptables 删了即可了 sudo apt-get remove iptables.

  2. Android Library projetcts cannot be exported.

    记一次比較无语的犯错,前几天我在紧急打包一个apk的时候.遇到了这样一个异常:Android Library projetcts cannot be exported. 异常提示截图例如以下: wat ...

  3. Asp.net mvc 知多少(一)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  4. redis远程连接问题(安全模式问题)

    我在windows上远程连接linux上的redis(我虚拟机上的)遇到了问题,我是在windows上php代码中的调用redis接口来远程连接的,代码中ping()的时候报错. 服务器端我确定了ip ...

  5. 企业级PPTP服务器

    第一个里程碑:检查系统是否支持ppp [root@m01 ~]# cat /dev/ppp cat: /dev/ppp: No such device or address 如果出现以上提示则说明pp ...

  6. IP地址简介

    IP地址 IP地址,Internet Protocol Address,网络协议地址: IP地址与网络接口绑定,并不是指向一台主机,一个主机可能有多个IP地址,如果其连接多个网络,有多个网络接口: I ...

  7. Python学习日记:day7-----集合

    1.基础数据类型汇总补充 1,list: 在循环一个列表是,最好不能删除列表中的元素. 2,bool 空列表.int:0.空str.空dict.空set--->bool:false 其余为tru ...

  8. Spring(概念)

    在本文中只讲述一些概念性的东西,因为我在开始学习JAVA的时候对这些概念性的东西总是不太理解,总结总结再感悟一下,也方便后人. 理解的不深,用通俗的语言讲一下: 百度百科这样介绍: spring框架主 ...

  9. Cat 客户端采用什么策略上报消息树

    策略分类 目前搞清楚两种 第一种(蓝色):默认服务器列表中选一个,算法核心是根据应用名的哈希值取模.也就是说同一个应用始终打到同一台服务器上,如果这台服务器挂了,另选一台服务器. 第二种(红色):应用 ...

  10. redis咋么实现分布式锁,redis分布式锁的实现方式,redis做分布式锁 积极正义的少年

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...