【问题标题】:ASP.Net MVC Website & Web API As Single ImplementationASP.Net MVC 网站和 Web API 作为单一实现
【发布时间】:2015-07-05 14:37:24
【问题描述】:

我有一个客户端仪表板应用程序,用 ASP.Net MVC 4 编写(未绑定到此版本,很高兴升级)。该网站托管在 Windows Azure 中。

我们的客户希望通过 API 以编程方式访问此仪表板。

他们希望能够通过使用 HTTP Restful 服务的代码以编程方式执行他们通常在仪表板网站上执行的所有相同功能。

....我的第一反应是简单地构建一个 ASP.net Web API 项目,并将共享服务/库/组件从现有的 MVC 项目中分离出来,以便 API 和 MVC 网站都可以调用相同的代码库。

问题

  1. 是否可以在我现有的 MVC 网站项目中简单地创建 Web API 控制器,并通过 HTTP 公开它们?
  2. 如果不可能做到“1.”,如果我有一个 MVC 解决方案、一个单独的 Web API 解决方案以及一个公共服务和模型的共享库项目,Azure 会很好地发挥作用吗?当我分别部署 MVC 解决方案和 Web API 解决方案时,如何确保 Azure 将共享库组件复制到云端?

更新

基于 cmets,以下两个独立控制器(MVC 项目中的原始 MVC 控制器和同一项目中的附加 Web API 控制器)的实现确实有效。请注意,基于以下LINKED ARTICLE,以下实现将是“MVC 6 之前的”实现。 MVC 6 本身提供了在单个控制器中实现 API 调用和通常的 MVC 视图调用的能力(而不是从不同基类继承的单独控制器)。

public class ProductsController : Controller
{
    //Products/Index
    public ActionResult Index()
    {
        return View();
    }
}

public class ProductsAPIController : ApiController
{
    // GET api/productsapi/getall
    public IEnumerable<string> GetAll()
    {
        return new string[] { "value1", "value2" };
    }
}

【问题讨论】:

  • 你到底在问什么?是否可以添加 Web API 控制器或 ASP.NET MVC 问题?只需Add New Item 即可找到,是的,您可以,并且还支持脚手架。您可以在ASP.NET 的网站上找到教程。共享库?库只是一个程序集。如果您的项目引用了 is,它将被部署。
  • 那么我如何确保我可以分别调用它们呢?端点肯定会不同吗?例如,如果我正常输入“dashboard.com/Products/Index”,Web api 调用会是什么样子?我假设它将默认为“dashboard.com/api/ProductsAPI/GetAll?” (假设我有一个用于 MVC 页面的 ProductsController 和一个用于 WEB Api 调用的 ProductsAPIController?"
  • 这是一个路由问题,应该单独问。您可以为两者使用路由配置,路由属性等。但没有什么要求使用 same URL。事实上,对 API 和使用 API 的 UI 使用相同的资源 URL 不是良好的 REST 实践
  • 您看到 Omar al Zabir 的这篇文章了吗? codeproject.com/Articles/233572/…

标签: c# asp.net asp.net-mvc azure asp.net-web-api


【解决方案1】:

最新版本的 MVC (6) 现在已将这两种技术集成到一个解决方案中。 http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6

如果您可以开始一个新项目,这将是您正在寻找的理想选择。

问题1:是的,看看上面的文章就知道了。

问题 2: 如果您有 MVC 解决方案和 WebApi 解决方案,Azure 会很好,但我认为您需要在不同的网站下运行它们(我不是 100% 的)。

【讨论】:

  • 和旧的一样。 OP 只询问在同一个项目中拥有 Web API 和 ASP.NET 控制器,而不是为两者使用一个控制器
  • 至于编辑 - 不,您不需要在不同的站点下运行任何东西。你已经可以在同一个站点上运行它们了,事实上很多 ASP.NET MVC SPA 在同一个站点上调用 Web API 服务
  • @PanagiotisKanavos 即使他们在不同的解决方案中?
  • 1) 为什么应该他们呢?没有理由 2) 您可以将 MVC 项目中的引用添加到包含 Web API 控制器的库中。无需使用单独的解决方案,只需创建一个供任何需要它的人使用的程序集
  • @PanagiotisKanavos 为什么 - OP 在他的第二个问题中说明了。
【解决方案2】:
  1. 是的,它会正常工作。唯一可能的问题是您必须清楚地将 WebAPI 路由与 MVC 路由分开(例如,所有 WebAPI 路由都在 /api/... 前缀下,这是默认设置)。

  2. 如果您出于某种原因决定执行两个单独的项目并希望拥有一个共享库,最好的解决方案是将该库保存在私有源上的 NuGet 包中。 TeamCity 支持开箱即用,以及其他不错的功能(持续集成/部署)。

【讨论】:

    【解决方案3】:

    公平地说 - MVC 或 WebAPI,就您的消费客户端而言,这无关紧要。

    MVC 和 WebAPI 都可以创建 JSON 或 XML 输出 - 这只是其中之一使它更容易(WebAPI 根据客户端序列化相关响应)。

    但是您可以很容易地将两者混合在一起,正如其他人所说,就像Add New Item 一样简单

    【讨论】:

      猜你喜欢
      • 2012-10-05
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多