【问题标题】:appSettings and ConfigurationManager.AppSettings issueappSettings 和 ConfigurationManager.AppSettings 问题
【发布时间】:2009-04-02 23:46:46
【问题描述】:

我搜索了该站点,虽然我发现了一些非常有用的信息,但我无法弄清楚我的代码发生了什么。我有以下 web.config:

<?xml version="1.0"?>
<configuration>
  <system.web>
  </system.web>

  <system.webServer>
  </system.webServer>

  <appSettings>
    <add key="APIKey" value="23e24c73feed7ca0f6afd876575842de"/>
    <add key="Secret" value="################################"/>
    <add key="Callback" value="http://localhost:55994/"/>
    <add key="Suffix" value="My3Words"/>
  </appSettings>
</configuration>

我已经剪掉了 system.web 和 system.webServer 中的内容,但这是在 ASP.NET MVC 应用程序中生成的默认设置。

我正在尝试访问该部分中的密钥(这是一个使用 FB Connect 的简单 Facebook 应用程序)。

在我的代码中,我有以下行:

return ConfigurationManager.AppSettings["APIKey"];

它返回一个空值。我无法完全弄清楚发生了什么。我有条件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Configuration;

在我的 .cs 文件的顶部。我非常怀疑键盘后存在错误(即在我的大脑中),但我无法解决这个问题。有什么想法吗?

【问题讨论】:

  • 您是从外部 DLL 调用 ConfigurationManager 吗?
  • 我正在从我的 HomeController.cs 调用的 .cs 文件中调用 ConfigurationManager
  • web.config 和 ConfigurationManager.AppSettings 之间并没有太多真正的问题,所以它有点奇怪。要确认您肯定使用了正确的配置文件,请尝试使您的 web.config 无效 XML 并验证您的网站是否失败?
  • 快速而肮脏的方法使配置文件无效?
  • 您的 .cs 文件所在的目录中是否还有另一个 web.config?也许尝试配置 c = WebConfigurationManager.OpenWebConfiguration("~");打开根目录中的那个。

标签: c# asp.net asp.net-mvc


【解决方案1】:

您是否尝试过使用WebConfigurationManager

return System.Web.Configuration.WebConfigurationManager.AppSettings["APIKey"];

这是在 Web 应用程序中使用配置文件的首选选项 - 它处理嵌套配置文件等内容。

【讨论】:

  • 即使我有多个 web.config 文件,这也不起作用。我已将 移动到另一个文件,这两种方法都可以很好地获取密钥。感谢您的回答...我是个白痴。
  • 好的,那么这个 web.config 在哪个文件夹中?它是否至少在(在文件夹树中)运行代码的位置?你不是白痴;)
  • 我和@Brandon 有同样的问题。这个答案是我的解决方案。我的项目是一个 WCF 服务库,当我在 IIS 中托管它并将配置从 App.config 移动到 Web.config 时。
  • WebConfigurationManager.AppSettings 只是简单地包装了 ConfigurationManager.AppSettings,所以这无济于事。一般来说,我更喜欢 ConfigurationManager.AppSettings 和 ConfigurationManager.ConnectionStrings,而不是 WebConfigurationManager 中的等价物,尤其是在类库中。
  • Kind of Joe:WebConfigurationManager 不只是“包装 ConfigurationManager”,它还为您提供了一种方法来读取和使用 IIS 在托管 Web 时使用的配置文件的层次结构应用程序 - 以及很好地理解网络特定部分。
【解决方案2】:

Visual Studio 为 MVC 创建 2 个 web.config 文件。 1 在根目录下,另一个在 Views 文件夹中。

【讨论】:

    【解决方案3】:

    您确定您使用的是正确的 Web.Config 文件吗?您可能希望使用应用程序根目录中的那个,而不是 Views 目录中的那个。

    ASP.NET MVC and two Web.config files

    【讨论】:

    • 这样做的感觉就像一个真正的布偶!感谢您提供基础知识:)
    【解决方案4】:

    检查以确保 web.config 文件的构建操作为“无”。如果构建操作是“嵌入式资源”,我已经看到了这个问题。

    【讨论】:

    • 它被设置为“内容”,但我设置为“无”没有效果。
    【解决方案5】:

    您的 machine.config 是否具有必需的 AppSettings 部分。它应该看起来像(版本号会不同):

    <configuration>
       <configSections>
           <section name="appSettings"
              type="System.Configuration.NameValueFileSectionHandler, System,          Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
       </configSections>
    </configuration>
    

    您确定您使用的是正确的 web.config 吗? ConfigurationManager.AppSettings.Settings 长什么样子?

    【讨论】:

      【解决方案6】:

      我敢打赌,您在编写时会使用正确的语法来访问它们:ConfigurationManager.AppSettings["Key1"];

      尝试这种格式的网络配置

      <?xml version="1.0"?>
      <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
      <appSettings>
          <add key="Key1" value="Val1"/>
          <add key="Key2" value="Val2"/>
      </appSettings>
      <connectionStrings>
          ......
          ......
      </connectionStrings>
      <system.web>
          <sessionState mode="InProc" timeout="20"/>
          <authorization>
              ......
          </authorization>
      
          <pages>
              <namespaces>
                  <add namespace="System.Data"/>
                  <add namespace="System.Data.SqlClient"/>
                  <add namespace="System.IO"/>
              </namespaces>
          </pages>
          <customErrors mode="Off"/>
          <compilation debug="true"/></system.web>
      </configuration>
      

      【讨论】:

        【解决方案7】:

        我的解决方案中有两个项目首先我在类库项目中添加 app.config 文件,所有实例都是从控制台应用程序调用的我在类库项目的配置文件中添加了这些条目

        <appSettings> 
        <add key="userName" value="user2" /> 
        <add key="emilsLimit" value="50" /> 
        </appSettings>
        

        当我在类库项目中的一个类中获取这些时,它抛出空异常,但是当我从类库项目中删除 app.config 并添加到控制台项目中时它可以工作。干杯

        注意:控制台中添加了Class lib项目引用

        【讨论】:

          【解决方案8】:

          你试过了吗:

          return ConfigurationManager.AppSettings.Get("APIKey");
          

          【讨论】:

            猜你喜欢
            • 2010-09-05
            • 2011-10-18
            • 2022-01-09
            • 1970-01-01
            • 2022-01-01
            • 2022-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多