在MVC5应用程序中使用API​​控制器的优势是什么?

时间:2016-04-29 20:34:44

标签: asp.net-mvc asp.net-web-api asp.net-web-api2

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

在我的应用程序中,视图非常复杂,因此我不会在第一次视图加载时构建整个模型。相反,我使用jQuery进行ajax调用,并根据需要获取JSON数据。 (注意即时通讯使用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 GT;是否可以将将Views和JSON数据返回的Action Methods合并到一个System.Web.Mvc.Controller中?我认为没有任何优势让单独的API控制器只返回JSON?实际上在MVC6中,微软摆脱了api控制器,而在MVC6中,一个控制器可以满足这两个目的。

2>我在页面上有一些按钮,比如激活用户,停用用户,我不需要将整个模型发送到服务器。动作方法将ID作为参数。 (在这种情况下我使用jquery来制作http帖子)可以在Mvc控制器中使用这样的方法吗?

从技术上讲,我的控制器工作方式正常,我的问题与推荐的设计实践有关

0 个答案:

没有答案