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控制器中使用这样的方法吗?
从技术上讲,我的控制器工作方式正常,我的问题与推荐的设计实践有关