1

我正在尝试构建我的第一个企业ASP.NET MVC 4 Web 应用程序,但在弄清楚事情的正确流程时遇到了一些问题。

假设我有一个视图 Clients.cshtml,它具有相应的 ClientsController、基类Controller

我希望客户端视图显示系统中所有客户端的列表。

由于关注点分离,我相信处理此类请求的正确位置将是一个ApiController,而不是它Controller本身,我认为它应该或多或少地仅限于 UI 任务。因此,我在其中添加了一个方法getClients(),该方法ApiController将返回一个包含所有客户端的 JSON 对象。

现在,我如何从我的 View 或我的Controller? 我相信,一种方法是使用 javascript 处理它;加载视图时,我调用ApiControllerusingjQuery等,并异步显示结果。

但我不确定这是正确的方法,是吗?我相信这是一种方法,但我想知道替代方案,或者更好(更传统)的处理方法。

谢谢

4

2 回答 2

2

如果您不会在其他 Web 应用程序或移动应用程序中使用该 API,则无需开发 Web API。Web API 旨在为多个消费者提供单一核心的简单方法,例如安卓应用程序、iOS、Web 应用程序甚至自定义第三方消费者。

因此,如果您的应用程序不会以这种方式使用,您就不需要使用 API 控制器。

如果您想分离关注点,我建议您在同一解决方案中创建一个不同的项目(类库项目),该项目将是您的内部 API。然后,您的 MVC 项目将使用您的内部 API,尽量使您的控制器保持皮肤状态。我建议您阅读这篇文章(它是针对 Ruby on Rails,但所有概念都适用于 MVC .NET)。

于 2012-12-05T23:07:38.923 回答
0

您正在寻找的似乎是一种将相同数据呈现给您的视图(服务器端呈现)和您的 javascript(通过 JSON API)的方法。

有多种方法可以解决这个问题。正如您所提到的,您可以创建一个单独的 API 控制器,但根据我的经验,一旦您超出少数 API 调用,这会有点臭。理想情况下,您希望您的 API 具有与普通控制器相同的 RESTful 架构,这意味着您将重复许多相同的逻辑来添加、列出和删除对象。

我发现的一个不错的选择是允许每个控制器返回视图或 JSON,具体取决于请求的格式。这可以扩展为包括 XML、CSV 或您希望从客户端使用的任何其他格式。Michael Morton有一篇关于这种方法的优秀博客文章。它可能不是您想要的,但最终结果看起来像这样:

public ActionResult Index()
{
    List<Client> clients = db.Clients.ToList();
    return RespondTo(format =>
    {
        format.Html = () => View(clients);
        format.Json = () => Json(clients);
    });
}
于 2013-01-08T22:22:00.890 回答