C# 在ASP.NET MVC(5)项目中使用Web API的优势是什么?

C# 在ASP.NET MVC(5)项目中使用Web API的优势是什么?,c#,asp.net,ajax,json,asp.net-mvc,C#,Asp.net,Ajax,Json,Asp.net Mvc,我正在ASP.NET MVC 5中实现一个企业web应用程序。在许多情况下,我编写AJAX获取和发布,并与服务器应用程序通信。目前,我正在编写控制器操作来服务这些请求,通常返回JSON结果。当我在客户端传递JSON时,action方法参数绑定似乎也能无缝工作 我不想在不合适的实践中走得太远,因此问题出现了,在我的项目中添加Web API支持,并重构我当前的ajax-controller实践有什么好处?相比MVC+ajax,使用Web API没有什么好处: 内部序列化 WebAPI有一个内部序列化

我正在ASP.NET MVC 5中实现一个企业web应用程序。在许多情况下,我编写AJAX获取和发布,并与服务器应用程序通信。目前,我正在编写控制器操作来服务这些请求,通常返回JSON结果。当我在客户端传递JSON时,action方法参数绑定似乎也能无缝工作


我不想在不合适的实践中走得太远,因此问题出现了,在我的项目中添加Web API支持,并重构我当前的ajax-controller实践有什么好处?

相比MVC+ajax,使用Web API没有什么好处:

  • 内部序列化

    WebAPI有一个内部序列化,这使得返回特定数据更加容易,无需您自己的扩展方法或使您的控制器依赖于序列化框架库

  • 行动结果帮助程序

    您可以使用大量的操作结果帮助程序,如
    Ok()
    NotFound()
    InternalServerError()
    ,它们都返回
    IHttpActionResult
    ,这使您的代码更易于阅读和维护,并清楚地说明您的意图

  • 行动结果抽象

    使用
    IHttpActionResult
    可以轻松地提取结果,这在单元测试控制器时非常有用

  • 可供自主机使用

    使用OWIN,您可以轻松地自托管WebAPI项目,这使您的应用程序更易于维护,并且与IIS无关

  • 本机属性路由

    WebAPI已经实现了属性路由,这使得所有路由配置更加容易(并且在使用基于特性的体系结构时会有所帮助)

  • DI配置改进

    WebAPI和MVC都有自己的组合根和不同的DI实现。Microsoft在WebAPI中引入了一些改进,使其更易于使用和维护


  • 我想说,只有当WebAPI不存在时,使用MVC+Ajax才可行,因为这是唯一的选择。

    如果您的项目客户需要多种格式(json、xml、csv)的数据,或者将来有机会更改,那么与MVC相比,Wep Api需要最少的配置。Wep Api根据内容协商将数据返回给客户端(如果客户端需要xml返回xml,如果json根据请求头返回json),但在mvc中,您需要更多的代码来满足这一要求。编写操作方法时,您必须显式指定数据格式。(
    JsonResult,ActionResult,XmlResult

    当您稍后查看代码时,WEPAPI为您提供了关于您正在做什么的更有意义的想法;
    public List Get()
    public JsonResult Index()
    更有意义

  • 重量轻,使用方便
  • 减少客户端和服务器之间的数据传输
  • 使用webapi,我们可以开发跨域应用程序
  • 与WCF相比,所需配置更少
  • 它简单、可扩展且健壮,因为它支持所有MVC功能,如路由、控制器、模型绑定、IOC容器、操作结果、过滤器或依赖项注入,因为它构建在Asp.NETMVC之上

  • 通过移交对HTTP协议消息发送和响应方式的控制权,增强开发人员的能力

  • 单元测试很容易,因为它支持测试驱动的开发

  • 由于内容协商和驱动对ASP.NET路由的支持,它在web API创建方面提供了足够的灵活性

  • 与WCF REST服务不同,不需要为不同的设备定义繁琐的配置设置

  • web API的体系结构非常轻巧,这使它们成为开发人员在为带宽有限的设备构建应用程序时的完美选择

  • WebAPI用于创建非基于SOAP的HTTP服务,因此,如果需要Web服务,但不需要SOAP,那么ASP.NETWebAPI是很好的选择

  • 支持不同的消息格式,如json、纯文本和xml

  • Asp.NETWebAPI支持基于约定的CRUD操作,因为它与HTTP谓词GET、POST、PUT和DELETE一起工作


  • 你看过ASP.NET 5(MVC 6)中的变化了吗?我还没有,虽然我已经将我的解决方案迁移到VS 2015,但是如果你不需要返回视图,使用相同版本的.NET、ASP.NET、EF和MVCWeb Api返回Json(或XML)会更好。在您的MVC控制器中,您是否从您的操作返回JSONResults?@g.pickardou,因为它们已删除ASP控制器和WebAPI控制器,并使用与您完全相同的新控制器mention@Padraic:是的,在控制器中,我将使用JsonResultThx返回哪些服务AJAX请求。我问的是一个特殊的场景,当存在一个MVC应用程序而不考虑web服务需求时。因此,在这种情况下,“可供自主机使用”并不是一个优势。问题是将MVC(控制器)与WebAPI(ApiController)进行比较——wcf与OP的问题无关