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

时间:2013-12-06 09:33:03

标签: c# javascript jquery asp.net web-config

我需要从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,但没有帮助。

3 个答案:

答案 0 :(得分:2)

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

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

然后,您必须开发一个处理程序(ashx文件)以对此文件执行服务器端处理。处理程序只会读取文件,识别变量并将其替换为来自Web配置,数据库的值,实际上您想要的位置。然后处理程序最终将修改后的字符串呈现为javascript文件。

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

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

如果我没弄错的话,Microsoft会通过WebResource.axd处理程序实现这种“服务器端预处理的JS”。

希望这会有所帮助......

答案 1 :(得分:1)

我很确定你无法直接从JS访问你的web.config。

在您的示例中,您从web.config-settings预加载单个值(CMSPopupAutoSize)。您可以不做类似的事情,但是使用列表或字典,或者类似的结构吗?

这可能是一个稍微混乱的解决方法,但是应该让你以稍微动态的方式获取几个配置值,即不要求每个特定的键都映射到页面。

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

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

答案 2 :(得分:1)

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