所以我的设置是这样的。如何在Azure部署中指定不同的api URL并在本地运行?
我有两个项目的解决方案。第一个项目是代表REST API的ASP.NET WebAPI项目。它完全没有视图,只返回API调用的JSON响应。
第二个项目是一个AngularJS客户端。我开始在Visual Studio中创建一个空的Web应用程序。所以这个项目确实有一个Web.Config和一个Azure发布配置文件,但没有C#控制器,路由,app_start等,它们都是JavaScript和HTML。
这两个项目在Azure中作为两个独立的Web应用程序进行部署。 Project_API和Project_Web。
我的问题是在我的Angular App中,当负责与REST API通信的服务时,我如何根据Azure中是否部署了vs vs本地方式来优雅地检测或设置URL?
// Use this api URL when running locally
var BaseURL = 'http://localhost:15774/api/games/';
// Use this api URL when deployed to Azure
// var BaseURL = 'http://Project_API.azurewebsites.net/api/games/';
它类似于Project_API项目的内部我可以为本地vs生产数据库设置不同的连接字符串。据我了解,因为C#代码可以从Web.Config读取数据库连接字符串,并且我可以在部署的应用程序的Azure应用程序设置中覆盖该值。我想我不知道为JavaScript客户端Web应用程序执行类似操作的正确方法。
是的,全球JavaScript +常量是一个好方法。在服务器端,您可以使用actionFilter来设置一个ViewBag.WebApiConfiguration对象,该对象包含您需要的所有信息。 –
常数是一个很好的提示。然而,对于Angular应用程序来说,它并不是一个自然的解决方案,它需要cshtml或Razor作为它的一部分。IIS应该能够提供单个页面的Angular应用程序。 进一步的研究和阅读表明ASP.NET 5具有运行集成gulp任务的Web Starter项目类型。 Gulp的模块可以在构建时动态创建带有常量的“config.js”文件。它可以创建不同的常量,具体取决于构建是开发还是生产。看起来像一个更自然的客户端Angular基于应用程序的解决方案 –
@SheldonJohnson您不需要* Razor来做到这一点 - 如果您使用Node或其他工具,但它肯定是生态系统中最自然的。如果没有引入额外的工具(有许多建议),这是正常的解决方案。 ASP.NET 5与以前的解决方案非常不同--Gulp和其他OS JS库基本上不存在于MS,直到最近。 –