【发布时间】:2015-07-05 14:37:24
【问题描述】:
我有一个客户端仪表板应用程序,用 ASP.Net MVC 4 编写(未绑定到此版本,很高兴升级)。该网站托管在 Windows Azure 中。
我们的客户希望通过 API 以编程方式访问此仪表板。
他们希望能够通过使用 HTTP Restful 服务的代码以编程方式执行他们通常在仪表板网站上执行的所有相同功能。
....我的第一反应是简单地构建一个 ASP.net Web API 项目,并将共享服务/库/组件从现有的 MVC 项目中分离出来,以便 API 和 MVC 网站都可以调用相同的代码库。
问题
- 是否可以在我现有的 MVC 网站项目中简单地创建 Web API 控制器,并通过 HTTP 公开它们?
- 如果不可能做到“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