不是我所知道的直接。我假设您所指的数据服务 JavaScript 文件是一个静态 JavaScript 文件,并且您希望在发布时更改 AJAX 端点的 URL。我认为你有几个选择:
第一个是修改您的构建并利用 MS Build 流程检查哪些发布设置正在用作此特定构建的一部分,然后在打包之前让构建任务手册修改 JavaScript 文件。我不认为我会推荐这条路线,因为它可能非常棘手并且不是很容易发现这是发生在你身后并且必须维护代码的人身上发生的事情。
另一种选择,如果您使用 MVC,我可能会考虑的一种选择是在请求时动态创建数据服务 JavaScript 文件,或者分离您需要动态的变量(例如 apiEndpoint)并动态生成生成。例如,为您的动态脚本创建一个控制器。然后在你的 CSHTML 文件中(或者如果你在任何地方都需要的话,在主文件中)使用这样的脚本标签来引用控制器:
<script src="@Url.Content("~/DynamicScript/ApiEndpoint")" type="text/javascript"></script>
<script src="@Url.Content("~/scripts/dataservice.js")" type="text/javascript"></script>
然后您的控制器可以执行以下操作:
public class DynamicScriptController : Controller
{
public JavaScriptResult ApiEndpoint()
{
string dynamicScript = string.Format("var apiEndpoint = '{0}';", ConfigurationManager.AppSettings["ajaxUrl"]);
return JavaScript(dynamicScript);
}
}
最后,将您要使用的 URL 放入您的 web.config 文件中,并将您一直用于其他配置文件值的转换使用。请注意,如果您认为需要在将 apiEndpoint 部署到 Azure 后即时更改它,您需要使用 CloudConfigurationManager 而不是 ConfigurationManager 并将设置移动到 CSDef/CSCfg 文件。
请注意,使用 JavaScriptResult 存在一些争议,但我不认为我在这里提供的示例涉及到这一点。您可以在 asp.net mvc 中的 JavaScriptResult 工作示例中看到有关该问题的一些讨论。
如果您使用的是 WebForms/ASPX,那么您总是会像我提到的那样从配置中读取 url,然后使用 asp:Literal 基本上做与上面的控制器相同的事情,除非它会在页面被渲染时包含在内.