Asp.net mvc 在MVC5应用程序中使用API控制器有什么好处?

Asp.net mvc 在MVC5应用程序中使用API控制器有什么好处?,asp.net-mvc,asp.net-web-api,asp.net-web-api2,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api2,ASP.NET Web API为客户端调用服务器端API提供了一种RESTful方式。因此,使用Web API开发的客户端(例如,Angular或纯HTML&jQuery)是有意义的。 我有一个使用ASP.NET MVC5开发的应用程序。在MVC5中,我们有MVC控制器,主要用于返回视图。但是,您也可以从MVC控制器返回JSON 在我的应用程序中,视图非常复杂,所以我不会在第一次加载视图时构建整个模型。相反,我使用jQuery进行ajax调用,并根据需要获取JSON数据。(注意,im使用tele

ASP.NET Web API为客户端调用服务器端API提供了一种RESTful方式。因此,使用Web API开发的客户端(例如,Angular或纯HTML&jQuery)是有意义的。
我有一个使用ASP.NET MVC5开发的应用程序。在MVC5中,我们有MVC控制器,主要用于返回视图。但是,您也可以从MVC控制器返回JSON

在我的应用程序中,视图非常复杂,所以我不会在第一次加载视图时构建整个模型。相反,我使用jQuery进行ajax调用,并根据需要获取JSON数据。(注意,im使用telerik控件,该控件进行ajax调用以获取JSON数据)。无论是谁进行ajax调用,在整个应用程序中,我都有几个对服务器的ajax调用。对于所有这些ajax调用,我没有使用System.Web.Http.ApiController创建单独的API控制器。相反,我使用的是MVC控制器类。因此,我的典型控制器类如下所示:

        public class HelloWorldController : Controller
            {
                public ActionResult Index()
                {
                    var model = new MyModel();

                    model.populateModelWithSomeBasicData();

                    return View(model);
                }

                [HttpGet]
                public ActionResult GetStates()
                {
                    var result = DomainService.GetStatesFromDB();

                    var model = ConvertToModel(result);

                    return Json(model);
                }

                [HttpGet]
                public ActionResult GetUsers(string stateCode)
                {
                    var result = DomainService.GetUsersFromDB(stateCode);

                    var model = ConvertToModel(result);

                    return Json(model);
                }

                [HttpPost]
                public ActionResult ActivateUser(int userID)
                {
                    var result = DomainService.ActivateUser(userID);

                    var model = ConvertToModel(result);

                    return Json(model);
                }

                [HttpPost]
                public ActionResult DeActivateUser(int userID)
                {
                    var result = DomainService.DeActivateUser(userID);

                    var model = ConvertToModel(result);

                    return Json(model);
                }

                [HttpPost]
                public ActionResult Save(MyModel model)
                {
                    var entity = ConvertToDomainEntity(model)
                    DomainService.Save(entity);
                    return View('MyView',model);
                }
            }
问题
1> 将返回视图和JSON数据的操作方法合并到一个System.Web.Mvc.Controller中可以吗?我不认为使用单独的API控制器来返回JSON有什么好处?事实上,在MVC6中,微软去掉了api控制器,而在MVC6中,一个控制器可以实现这两个目的

2> 我在页面上有一些按钮,如激活用户,停用用户,我不必发送整个模型到服务器。动作方法以ID为参数。(在本例中,我使用jquery生成HTTPPOST)在Mvc控制器中使用这样的方法可以吗


从技术上讲,我的控制器是如何工作的,我的问题与推荐的设计实践有关

MVC并没有真正设计出REST-ful语义。WebAPI是。如果你需要一个服务层,你应该使用WebAPI。。。对于渲染视图,应使用MVC。webAPI中有很多特性,可以让使用任何类型的restful API层变得更好。最终决定权归你,但我不会把这两个问题混为一谈。我个人的看法course@Josh谢谢APIcontroller中有哪些更好的特性是MVC控制器中没有的?我只需要获取数据并将其发布到服务器。MVC并没有真正设计成REST-ful语义。WebAPI是。如果你需要一个服务层,你应该使用WebAPI。。。对于渲染视图,应使用MVC。webAPI中有很多特性,可以让使用任何类型的restful API层变得更好。最终决定权归你,但我不会把这两个问题混为一谈。我个人的看法course@Josh谢谢APIcontroller中有哪些更好的特性是MVC控制器中没有的?我只需要获取数据并将其发布到服务器。