我正在编写一个API,将被Web应用程序和移动应用程序使用,并在我的技术栈中使用ASP.NET MVC 2。
目前,我有一个类似于Rest的API服务,返回JSON格式的数据。这对于移动应用程序很有效,但我也希望它能够为Web应用程序工作。
在控制器操作中返回HTML视图或JsonResult是否是一个好方法?Web应用程序和移动应用程序的唯一区别在于视图层;应用程序逻辑相同。
我想我可以创建一个专门用于Web应用程序的控制器,但我认为会从API控制器中复制很多逻辑。
编辑
我有另一个处理所有应用程序逻辑的层,但API控制器仍然具有验证参数和返回JSON响应时的错误处理等一些逻辑。到目前为止,重复的逻辑部分是验证部分。
以下是一些代码片段:
public JsonResult GetList(string accessToken, string listId)
{
if (string.IsNullOrEmpty(accessToken))
return Json(new { success = false, exceptionMessage = "Facebook access token is required." });
if (string.IsNullOrEmpty(listId))
return Json(new { success = false, exceptionMessage = "The list id is required." });
string facebookId = null;
var facebookIdParseSuccess = GetFacebookId(accessToken, out facebookId);
if (!facebookIdParseSuccess)
return Json(new { success = false, exceptionMessage = "There was a problem accessing your Facebook profile information." });
try
{
_groceryListManager.FacebookId = facebookId;
var groceryList = _groceryListManager.GetList(listId);
GroceryListViewModel mappedList = new GroceryListViewModel();
Mapper.Map(groceryList, mappedList);
return Json(new { success = true, results = mappedList });
}
catch (Exception ex)
{
return Json(new { success = false, exceptionMessage = "..."});
}
}
X-Requested-With
HTTP 头并将值设为XMLHttpRequest
来确定,这是一些 AJAX 库在其异步请求上自动设置的。这些库包括 MicrosoftAjax.js 和 jQuery,因此大多数使用 ASP.NET MVC 的人都可以使用。如果您使用其他内容或手动滚动请求,则仍然可以手动设置该 HTTP 标头,并且Request.IsAjaxRequest()
将正确反映它。 - Dave Ward