【问题标题】:Create a View against an API controller?针对 API 控制器创建视图?
【发布时间】:2014-05-08 03:59:47
【问题描述】:

我需要创建一个网站,其中一些页面应该可以通过 API 从外部客户端访问,但我仍然希望创建常规的 MVC Razor 视图来检索、显示和操作相同的数据。

实现这一目标的最佳方法是什么?

更新

API 必须公开的只是数据操作。

对于网页,我仍然希望从 razor chtml 视图中受益,我不喜欢用多余的 jQ 或 JS 或 data- 消耗数据的属性来污染我的视图。

【问题讨论】:

    标签: asp.net-mvc razor asp.net-mvc-views asp.net-apicontroller


    【解决方案1】:

    只需使用您想要的页面创建一个 MVC 项目,然后创建 ApiControllers(来自 Web API 框架)作为 RESTful 端点。您可以对视图进行编程,以从 API 操作中检索数据作为 JSON 对象,并使用 javascript 使用它们。其他人可以点击相同的 API 操作并以其他方式使用数据。

    如果您想从 WebApi 开始,并基于其他人可以通过该 API 访问的相同数据构建基本视图,您可以将 WebApi 控制器注入到您的普通 MVC 控制器中,并调用它们的方法来获取数据你需要构建你的 ViewModels。只要您的 API 控制器不需要做任何“开箱即用”的事情,例如直接检查 Request 对象,这应该可以正常工作。

    更健壮的方法是创建一个“管理器”层来处理应用程序的所有业务逻辑,然后让您的 ApiController 成为对其各自管理器类的调用的薄包装器。这会增加一点维护成本,但会更好地遵守单一职责原则。

    【讨论】:

    • 这正是我的问题,您是否可以从两个世界、web api 和 MVC 视图中受益(不与 js 等一起使用)。我喜欢保持我的观点尽可能的糟糕和干净。
    • @Shimmy:我是否理解您不想构建使用 AJAX 等的富客户端界面?您只想拥有一个 WebApi,并基于其他人可以通过该 API 访问的相同数据构建基本视图?可以想象,您可以将 WebApi 控制器注入到普通的 MVC 控制器中,并调用它们的方法来获取构建 ViewModel 所需的数据。
    • @StripingWarrior,我读了你的评论。这就是我要做的!这就是答案,请更新您的帖子。
    【解决方案2】:

    最简单的方法是只使用 MVC。

    您还可以将 MVC + WebAPI 组合在一个站点中。

    选择第一个选项的原因是简单,并且学习维护一个框架和一组抽象。

    但是,如果您有以下任何要求,添加 Web API 就会变得有趣: 1. 您想为响应类型进行内容协商(例如 XML 与 Json 进行相同的操作)。 2.你想支持CORS 3. 您需要 API 的帮助页面。 4. 您希望使用以休息和资源为中心的方法(基本上是 GET /resource 而不是 /resource/GetData)为您的 API 构建 Url 空间。 5. 更容易对控制器和动作进行单元测试。

    这两个框架都是由同一个团队构建的,它们都支持属性路由和许多类似的概念,并且两者都可以很好地协同工作。我已经看到人们成功地采用了这两种方法。另请注意,Visual Studio 的模板从一开始就将它们结合在一起。

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 2015-04-19
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多