从Global.asax读取web.config文件

时间:2015-04-24 20:26:30

标签: asp.net-web-api web-config global-asax configurationmanager

我在我的Web API项目中启动了代码,该代码尝试从默认情况下在bin目录中发布的web.config文件中读取值。因为应用程序初始化点是Global.asax,所以此级别没有web.config,所以我需要弄清楚如何在bin文件夹中引用它。

这是我的IIS目录的根目录:

Root directory of WebAPI project bound in IIS.

无论何时我尝试使用ConfigurationManager.AppSettings从web.config文件中读取值,它们都会返回null。只有当我将web.config移出bin文件夹并进入根目录时才会找到值。

我尝试添加一些代码,建议在尝试读取值之前强制路径指向正确的默认位置(在bin文件夹中),但这不会起作用:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Fix web.config location
        var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin\\web.config");
        AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);

        var appId = ConfigurationManager.AppSettings["ApplicationId"];
    }
}

有没有办法强制生成bin文件夹中的web.config路径?

1 个答案:

答案 0 :(得分:2)

首先,我不知道你为什么要将你的web.config文件保存在bin文件夹中。 web.config文件的默认路径始终与global.asax(即应用程序的根目录)相同。我一直在ASP.NET,ASP.NET WebAPI和ASP.NET MVC应用程序中工作,所有这些应用程序都将web.config保存在与Global.asax相同的文件夹中。

如果将web.config文件从bin目录移动到与global.asax相同的文件,是否会丢失任何内容?

此外,如果它是您想要阅读的连接字符串(我从previous问题中获得),您可以在下面执行此操作并将您的connectionSettings放在bin目录的web.config中。

<connectionStrings configSource="bin\connection.config"/>

有关配置文件的更多详细信息,请参阅this文章。