最近做了很多项目,也同时使用了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. redhat5安装Oracle11g

    redhat5安装Oracle11g 测试环境redhat5.5 oracle11g VMware 虚拟机 一.linux系统安装 二.下载oracle安装包 (我们需要把oracle安装包上传到li ...

  2. 在Laravel中使用swoole来取代nginx作为http服务器

    1.是什么限制Laravel框架的速度? Laravel框架启动的时候需要加载很多文件,再加上其出了名的生态环境好,所以在开发过程中我们就会发现有非常多的已经造好的轮子,这也就使得Laravel的一次 ...

  3. 微信小程序的Web API接口设计及常见接口实现

    微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们 ...

  4. redis启动脚本报错

    1.执行redis脚本启动报错 [root@localhost ~]# service redis start /var/run/redis_6379.pid exists, process is a ...

  5. Python 项目实践一(外星人入侵小游戏)第五篇

    接着上节的继续学习,在本章中,我们将结束游戏<外星人入侵>的开发.我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏.我们还将修改这个游戏,使其在玩家的等级提高时加快 ...

  6. 《HelloGitHub》第 21 期

    公告 元旦快乐! <HelloGitHub>第 21 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编 ...

  7. Error Running Git Empty git --version output:IDEA关联GitHub时出现这个错误

    刚刚学习使用idea中,想要把自己的项目上传到github,遇到这样一个问题,先记录下来,到时候解决了在把方法贴出来. ---------------------------------------- ...

  8. Tensorflow之MNIST机器学习入门

    MNIST机器学习的原理: 通过一次次的 输入某张图片的像素值(用784维向量表示)以及这张图片对应的数字(用10维向量表示比如数字1用[0,1,0,0,0,0,0,0,0,0]表示),来优化10*7 ...

  9. CentOS7.2 使用Shell安装Oracle12c

    一.操作系统说明 1.操作系统 版本 2.磁盘分区用量 二.安装必要的软件包 for pkg in 'binutils' 'compat-libcap1' 'compat-libstdc++-33' ...

  10. rabbitmq 启动报错

    =============================================== 2017/10/24_第1次修改                       ccb_warlock = ...