我正在构建一个客户端脚本繁重的ASP.NET MVC应用程序,它将使用JSON和jQuery来操作DOM。
我的理解是Web API Controller和MVC Controller都可以返回JSON。
在我的情况下,应该使用Web API控制器还是MVC控制器?
我正在构建一个客户端脚本繁重的ASP.NET MVC应用程序,它将使用JSON和jQuery来操作DOM。
我的理解是Web API Controller和MVC Controller都可以返回JSON。
在我的情况下,应该使用Web API控制器还是MVC控制器?
Answers:
可以在任何ASP.NET应用程序中创建并托管Web API控制器,而不仅仅是MVC应用程序。因此,创建Web API的明显原因是您没有MVC前端(例如,公司/组织托管的经典RESTful Web服务)。
MVC控制器通常依赖于MVC框架,如果您查看默认模板以及社区和对等方所做的大部分工作,您会注意到几乎所有MVC控制器都是在考虑视图的情况下实现的。
就个人而言,当我打算用View()进行响应时,我会使用MVC控制器,而对于不依赖于特定视图的任何事物,我都会使用Web API。
当然,有一些警告,但是通常来说,如果您不需要MVC的模型绑定行为,则您的服务是以数据为中心,而操作是以数据为中心(例如CRUD操作),那么您可能希望使用“ Web API控制器”而不是“模型视图控制器”。相反,如果您的操作是以视图为中心的(例如,向用户提供用户管理页面),或者您需要MVC的模型绑定来生成“ ajax局部”(非常不可能),那么您将需要MVC控制器。
我个人使用Web API控制器来驱动基于JSON的RESTful客户端,我使用MVC控制器来处理基本的浏览器路由和SPA的传递。
WebAPI用于制作API。如果您希望某人能够使用XML,JSON等格式的API,则可以制作一个Web api。
在您的情况下,您只需要使用JSON与客户端对话即可。
即使您的网站主要是由客户端脚本驱动的,您仍将使用ASP.NET MVC Controller对吗?并且由于您可能已经根据实体在逻辑上划分了控制器,因此有必要在其中添加这些json服务方法,而不是专门为Web API创建另一个类。
因此,对于您的特殊情况(如果我理解正确的话),我会坚持使用Controllers。
我对ApiController唯一的担心是它基于站点而不是基于区域。一个站点只能有一个apicontroller子文件夹,以便您命名控制器方法。在某些情况下,您可能需要在不同区域中复制控制器名称:
domain.com/api/area1/controller1/
domain.com/api/area2/controller1/
我记得有一些自定义代码设置可以执行此操作,但是默认情况下它不起作用。
我同意肖恩·威尔逊(Shaun Wilson)的回答(最高答案),但不知道为什么,因为我有点困惑,仍然尝试理解以下(可能是错误的)预感-
您看,我只是不知道自己在这里是多么不正确,并感到困惑,因为Shaun的回答的最后一行指出:“我使用MVC控制器来处理基本的浏览器路由和SPA的传递。” -当我以为它是接收JSON格式响应的JavaScript方法时,也许我并不完全了解一个宁静的客户端。这是Stackoverflow中最近的帖子,该帖子与我的问题的答案密切相关,因此我在回答这篇文章,而不是重复问题。
在这种情况下,我建议使用WebApi,因为它非常适合基于Java脚本请求传输此类数据。通常,我将开发WebApi控制器,以便它们返回JSON友好对象,然后可以使用Javascript轻松解析该对象。
您想在MVC控制器上执行某种操作的唯一实时时间是,您想生成一些HTML并用Javascript调用替换页面的某些部分。
例如:
您有一个JQuery UI Datepicker,一旦选择,它就会生成一个单选按钮列表,这些单选按钮代表所选日期的事件。
在这种情况下,您可以使用WebApi返回一些JSON,然后使用Javascript生成必要的HTML,但是通常,使用Javascript创建许多HTML是一种不好的做法。最好让C#构建HTML,然后通过局部视图将其返回,因为这样您就不太可能在Javascript解析中遇到错误。更不用说它使HTML易于编写。