【问题标题】:Access web config in a separate js file [duplicate]在单独的 js 文件中访问 Web 配置 [重复]
【发布时间】:2013-12-06 09:33:02
【问题描述】:

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

【问题讨论】:

  • @kjartan 感谢编辑
  • :( 对我的情况没有帮助,我已经在问题中讨论了该解决方案..

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


【解决方案1】:

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

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

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

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

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

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

希望这会有所帮助...

【讨论】:

    【解决方案2】:

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

    在您的示例中,您从 web.config-settings 预加载了一个值 (CMSPopupAutoSize)。你能不做类似的事情,而是用一个列表或字典,或者一些类似的结构吗?

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

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

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

    【讨论】:

    • 是的,我可以做所有这些,但我不应该接触 asp.net 网站。只是 web.config 中的一个键并在 js 文件中使用它:(
    • 你能不能用一个链接编辑你的答案,也许可以得出这样的结论:这是不可能的..
    • 那么这根本不可能...... JS没有在服务器上处理,就是这样,如果没有解决方法,您无法从JS访问web.config,任何解决方法都意味着编写服务器端代码在某个时候。看一下我的答案……而且没有必要证明这一点,对服务器端和客户端概念的基本了解就足以理解这一点。
    • @Bartdude,感谢专业人士的帮助。我需要为此假设一些其他解决方案,甚至是你的:)
    • @tariq 我没有任何明确的保证,但我相当确定 JS 不能在服务器端读/写任何东西。例如,请参阅此线程和具体答案(由 OP 本人):stackoverflow.com/a/19323572/336648
    【解决方案3】:

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

    【讨论】:

    • 上面已经由 Bartdude 提出,你应该给他投票。
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2019-02-08
    • 2019-08-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多