使用WebAPI或MVC在ASP.NET中返回JSON

Nil*_*Pun 137 asp.net-mvc json asp.net-web-api

我正在构建一个客户端脚本很重的ASP.NET MVC应用程序,它将使用JSON和jQuery来操作DOM.

我的理解是Web API ControllerMVC Controller都可以返回JSON.

鉴于我的场景,我应该使用Web API控制器还是MVC控制器

Sha*_*son 155

Web API控制器可以在任何ASP.NET应用程序中创建和托管,而不仅仅是MVC应用程序.因此,创建Web API的一个明显原因是,如果您没有MVC前端(例如,您的公司/组织托管的经典,RESTful Web服务).

MVC控制器通常依赖于MVC框架,如果您查看默认模板以及社区和您的同行完成的大部分工作,您会注意到几乎所有MVC控制器都是在考虑View的情况下实现的.

就个人而言,当我打算用View()响应时,我使用MVC控制器,并且我将使用Web API来处理任何不依赖于特定视图的东西.

当然有一些警告,但一般来说,如果你不需要MVC的Model Binding行为,你的服务是以数据为中心的,而操作是以数据为中心的(例如CRUD操作),那么你可能想要一个'Web API Controller '而不是'模型 - 视图控制器'.相反,如果您的操作是以视图为中心的(例如,向用户提供用户管理页面),或者您需要MVC的模型绑定来生成'ajax partials'(非常不可能),那么您将需要一个MVC控制器.

就个人而言,我使用Web API控制器来驱动基于JSON的RESTful客户端,我使用MVC控制器来处理基本的浏览器路由和SPA的交付.


Muh*_*han 31

WebAPI用于制作API.如果您希望某人能够以XML,JSON等方式使用您的API,您可以创建一个Web api.

在您的情况下,您只需要与JSON中的客户端交谈.

即使您的网站主要是客户端脚本驱动,您仍然会使用ASP.NET MVC控制器吗?并且由于您可能已经基于实体在逻辑上划分了控制器,因此在其中添加这些json服务方法是有意义的,而不是专门为web api创建另一个类.

因此,对于您的特定情况(如果我理解正确),我会坚持使用控制器.

  • Web Api可以执行JSON,以及您列出的其他方法.控制器不能(整齐地)变成API,所以鉴于用户有先见之明 - 我建议使用更具可扩展性/灵活性的解决方案.它不像老学校的WCF服务,web api通常既强大又灵活.因此,虽然您只需要简单的场景,但它仍然不受影响.如果你需要,你就拥有了力量 (4认同)

小智 7

答案归结为分离关注点,加强服务的创建以及依赖惯例而不是配置.

控制器的主要职责是作为视图和模型之间的协调者,但API的主要职责是处理数据.在API的约定的情况下,使执行CRUD操作变得非常容易.下面是CRUD操作和HTTP操作之间的映射

  • GET:阅读
  • POST:创建
  • PUT:更新
  • 删除:删除

因此,使用API​​,您不必创建单独的操作,并使用HTTP操作对其进行归因.