我一直在摆弄ASP。NET MVC 4 beta和我现在看到两种类型的控制器:ApiController和Controller。

我有点困惑在什么情况下我可以选择一个特定的控制器。

例如:如果我想返回一个视图,那么我必须使用ApiController或普通控制器?我知道WCF Web API现在已经与MVC集成了。

既然现在我们可以使用两个控制器有人能指出对应的控制器的情况吗。


当前回答

快速简短回答

如果你想返回一个视图,你应该在“Controller”中。

正常控制器- ASP。NET MVC:如果你在ASP.net Web应用程序中,你处理的是普通的“控制器”。你可以创建Controller-Actions并返回Views()。

ApiController Controller:在开发ASP.net REST api时创建ApiControllers。你不能返回视图(虽然你可以返回Json/Data为HTML字符串)。这些api被认为是后端,它们的函数被调用来返回数据而不是视图

详情请点击此处

其他回答

如果你在最新的框架4.7.2中创建了一个新的web应用程序,你将默认配置它们,并可以在此基础上构建你的应用程序

快速简短回答

如果你想返回一个视图,你应该在“Controller”中。

正常控制器- ASP。NET MVC:如果你在ASP.net Web应用程序中,你处理的是普通的“控制器”。你可以创建Controller-Actions并返回Views()。

ApiController Controller:在开发ASP.net REST api时创建ApiControllers。你不能返回视图(虽然你可以返回Json/Data为HTML字符串)。这些api被认为是后端,它们的函数被调用来返回数据而不是视图

详情请点击此处

在Asp.net Core 3+ Vesrion

Controller:如果想返回任何与IActionResult & Data相关的东西,选择Controllercontroller

ApiController:在API控制器中用作属性/符号。它继承了ControllerBase类

ControllerBase:如果想返回数据,只返回ControllerBase类

你更愿意编写和维护哪一个?

ASP。NET MVC

public class TweetsController : Controller {
  // GET: /Tweets/
  [HttpGet]
  public ActionResult Index() {
    return Json(Twitter.GetTweets(), JsonRequestBehavior.AllowGet);
  }
}

ASP。网上广告

public class TweetsController : ApiController {
  // GET: /Api/Tweets/
  public List<Tweet> Get() {
    return Twitter.GetTweets();
  }
}

主要的区别是:Web API是针对任何客户端、任何设备的服务,而MVC控制器只服务于它的客户端。同样,因为它是MVC平台。