我一直依赖Azure发布配置文件来使用正确的连接字符串转换我的web.configs。这非常有效。
我现在需要另一个更改 - 在我的dataservice javascript文件中,我为AJAX查询定义了端点,如下所示:
var apiEndpoint = "http://localhost:24144/api/";
//var apiEndpoint = "http://appservice.azurewebsites.net/api/";
我目前必须记得在发布之前手动将其更改为azure端点。有时我会忘记并且网站会中断。有没有办法以某种方式更改此JS属性作为Azure发布配置文件的一部分?
答案 0 :(得分:1)
不是我直接意识到的。我假设您引用的dataservice JavaScript文件是静态JavaScript文件,并且您希望在发布时更改AJAX端点的URL。我想你有几个选择:
第一个是修改您的构建并进入MS Build过程以检查哪些发布设置被用作此特定构建的一部分,然后在打包之前使用Build任务手册修改JavaScript文件。我不认为我会推荐这条路线,因为它可能非常棘手且无法发现,这可能是那些可能会跟在你身后并且必须维护代码的人们所发生的事情。
另一个选项,以及我在使用MVC时可能会看到的选项,是要么在请求时动态创建dataservice JavaScript文件,要么将需要动态的变量分开(例如apiEndpoint) )并动态生成。例如,为动态脚本创建一个控制器。然后在你的CSHTML文件中(或者如果你需要在任何地方在master中)使用这样的脚本标记来引用控制器:
<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文件中,并使用您用于其他配置文件值的转换。请注意,如果您认为在部署到Azure后想要动态更改apiEndpoint,您将要使用CloudConfigurationManager而不是ConfigurationManager并将设置移动到CSDef / CSCfg文件。
请注意,使用JavaScriptResult存在一些争议,但我不认为我在这里提供的示例涉及到这一点。您可以在Working example for JavaScriptResult in asp.net mvc看到有关该问题的一些讨论。
如果您正在使用WebForms / ASPX,那么您总是回头阅读配置中的url,就像我提到的那样,然后使用asp:Literal基本上做与上面的控制器相同的事情,除非它将被包括在内页面已呈现。