我需要创建一个网站,其中一些页面应该可以通过 API 从外部客户端访问,但我仍然想制作常规的 MVC Razor 视图来检索、显示和操作相同的数据。
实现这一目标的最佳方法是什么?
更新
API 必须公开的只是数据操作。
对于网页,我仍然希望从 razor chtml 视图中受益,我不喜欢用多余的 jQ 或 JS 污染我的视图,也不喜欢data-
消耗数据的属性。
我需要创建一个网站,其中一些页面应该可以通过 API 从外部客户端访问,但我仍然想制作常规的 MVC Razor 视图来检索、显示和操作相同的数据。
实现这一目标的最佳方法是什么?
更新
API 必须公开的只是数据操作。
对于网页,我仍然希望从 razor chtml 视图中受益,我不喜欢用多余的 jQ 或 JS 污染我的视图,也不喜欢data-
消耗数据的属性。
只需使用您想要的页面创建一个 MVC 项目,然后创建ApiController
s(来自Web API框架)作为 RESTful 端点。您可以对视图进行编程,以从 API 操作中检索数据作为 JSON 对象,并使用 javascript 使用它们。其他人可以点击相同的 API 操作并以其他方式使用数据。
如果您想从 WebApi 开始,并基于其他人可以通过该 API 访问的相同数据构建基本视图,您可以将 WebApi 控制器注入到您的普通 MVC 控制器中,并调用它们的方法来获取您需要的数据构建您的 ViewModel。只要您的 API 控制器不需要做任何“开箱即用”的事情,例如Request
直接检查对象,这应该可以正常工作。
一个更健壮的方法是创建一个“管理器”层来处理应用程序的所有业务逻辑,然后让你的 ApiControllers 只是围绕调用它们各自的管理器类的薄包装器。这会增加一点维护成本,但会更好地遵守单一职责原则。
最简单的方法是只使用 MVC。
您还可以将 MVC + WebAPI 组合在一个站点中。
选择第一个选项的原因是简单,并且学习维护一个框架和一组抽象。
但是,如果您有以下任何要求,添加 Web API 会变得很有趣: 1. 您想要为响应类型进行内容协商(例如 XML 与 Json 进行相同的操作)。2. 你想要支持 CORS 3. 你想要一个 API 的帮助页面。4. 您希望使用以休息和资源为中心的方法(基本上是 GET /resource 而不是 /resource/GetData)为 API 构建 Url 空间。5. 更容易对控制器和动作进行单元测试。
这两个框架都是由同一个团队构建的,它们都支持属性路由和许多类似的概念,并且都可以很好地协同工作。我已经看到人们成功地采用了这两种方法。另请注意,Visual Studio 的模板从一开始就结合了它们。