加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC:让API控制器操作同时返回View和/或

发布时间:2020-12-16 09:59:23 所属栏目:asp.Net 来源:网络整理
导读:我正在编写一个可供Web应用程序和移动应用程序使用的API,我在我的技术堆栈中使用ASP.NET MVC 2. 目前,我有一个类似Rest的API服务,它以JSON格式返回数据. 这适用于移动应用程序,但我也希望它也适用于Web应用程序. 让控制器操作返回HTML视图或JsonResult是一个
我正在编写一个可供Web应用程序和移动应用程序使用的API,我在我的技术堆栈中使用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 = "..."});
    }
}

解决方法

我之前看过一个动作方法返回,但是,在我看来,你最好有两个独立的动作方法.你可以让他们用共享代码调用另一个方法,但由于它们被用于两个非常不同的东西,你可能会发现如果你有两个方法就更容易维护(未来的要求可能导致一个方法改变一个这种方式很难在单一方法中支持这两种方法).

它们是否在同一个控制器中实际上更依赖于应用程序的性质,大小和复杂性.我已将API分离为与HTML完全不同的项目.我已经共享dll来访问数据和其他常见功能,但MVC项目是不同的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读