首页 > 解决方案 > 无法从子 web.config 读取

问题描述

我的根 web.config 包含:

<configuration>
    <configSections>
    ....
    </configSections>
    <appSettings>
        <add key="webpages:Version" value="3.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        ....
    </appSettings>
    ....
<configuration>

我在该位置创建了另一个 web.config 文件,~Credentials/web.config其中包含:

<configuration>
    <appSettings>
        <add key="mail.smtpServer" value="smtp.gmail.com" />
        <add key="mail.port" value="587" />
    </appSettings>
</configuration>  

在我的控制器内部,我试图像这样访问它们:

private readonly string _smtpServer = ConfigurationManager.AppSettings["mail.smtpServer"];
private readonly int _port = Convert.ToInt32(ConfigurationManager.AppSettings["mail.port"]);  

如果邮件设置在根目录中,web.config则控制器可以读取它们,但如果设置在子目录中,web.config则无法找到它们,它们仍然为空。我该如何解决这个问题?

标签: asp.net-mvc

解决方案


这可能是层次结构问题。根 web config 文件写入根文件夹和后续子文件夹的配置规则。但是根配置参数可以被子文件夹根目录中的 web.config 覆盖。如果您的控制器位于根文件夹 ~credentials 或其子文件夹中,则子 web.config 可以覆盖您在根 Web 配置中设置的参数。

<configuration>
    <configSections>
    ....
    </configSections>
    <appSettings>
        <add key="webpages:Version" value="3.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        <add key="mail.smtpServer" value="" />
        <add key="mail.port" value="" />
        ....
    </appSettings>
    ....
</configuration>

和孩子 web.config

<configuration>
    <appSettings>
        <add key="mail.smtpServer" value="smtp.gmail.com" />
        <add key="mail.port" value="587" />
    </appSettings>
</configuration>  

推荐阅读