在单独的js文件中访问web配置

Access web config in a separate js file

本文关键字:访问 web 配置 文件 单独 js      更新时间:2024-03-26

我需要从js文件中读取一个web配置键值。我知道我们可以在aspx文件中定义一个变量,并用下面的表达式初始化它,然后在js文件中访问这个变量。js文件实际上是站点中引用的自定义dll的一部分

<script type="text/javascript" language="javascript">
   var CMSPopupAutoSize = 
       '<%=Convert.ToString(
            ConfigurationManager.AppSettings["FP:CMSPopupAutoSize"]) %>';
</script>

但我的要求是,我必须从js内部读取配置文件。我不需要对现有的网站页面进行任何更改。这是一种向后兼容性要求。我在这里发现了一些相关的东西http://forums.asp.net/t/1117176.aspx但无济于事。

这是不可能的,因为JS在被请求时不会被服务器处理,而只是在响应中发送回来。不过,您可以创建一个呈现JS文件的ashx处理程序。

因此,我们的想法是在服务器上有一个"几乎是javascript"的文件。这个文件是一个特殊的文件,主要包含JS,但也包含一些服务器变量。你只需要决定这些变量的格式(例如##APP_CMSPopupAutoSize##)。

然后,您必须开发一个处理程序(ashx文件)来对该文件执行服务器端处理。处理程序只需读取文件,识别变量,并将其替换为来自web配置、数据库的值,无论您希望在哪里。处理程序最终会将修改后的字符串呈现为javascript文件。

基本上,在HTML代码中,您只需要以这种方式调用处理程序:

<script src="/pathToHandler/myHandler.ashx"></script>

如果我没有记错的话,微软通过WebResource.axd处理程序实现了这种类型的"服务器端预处理JS"。

希望这能帮助。。。

我很确定您不能直接从JS访问web.config。

在您的示例中,您从web.config-settings中预加载了一个值(CMSPopupAutoSize)。您是否可以不做类似的操作,而是使用列表或字典,或一些类似的结构?

这可能是一个稍微混乱的解决方案,但应该允许您以稍微更动态的方式获取几个配置值,即不需要将每个特定键映射到页面中。

更新 (部分参考下面的评论):如果你不能更改页面本身的任何内容,也许你可以创建一些其他服务器端资源(另一个页面,或者只是一个生成的公开文本文件?),JS可以从中读取?在任何情况下,您都必须找到一些方法来公开您的Config值,以便JS可以读取它们。

能够直接从JS访问配置文件(或任何其他服务器端文件)可能会构成严重的安全威胁。

客户端脚本无法直接访问web.config。创建一个HttpHandler,从javascript调用if,并通过处理程序读取web.config。