如何在.Net Core应用程序中阅读web.config文件

Zuh*_*air 19 configuration connection-string asp.net-core

我创建了一个.Net Core API,我引用了一个.Net框架应用程序.引用的Application连接到数据库,其连接字符串存储在web.config文件中:

    string CONNSTR =ConfigurationManager.ConnectionStrings["SHOPPINGCNN"].ConnectionString;
Run Code Online (Sandbox Code Playgroud)

.Net Core应用程序使用appsettings.json而不是web.config文件.当我运行API并尝试使用引用的应用程序资源时,上面的代码将被触发并返回null,因为.net Core应用程序中不存在web.config文件.解决此问题的最佳解决方案是什么

Zuh*_*air 13

由于.Net Core应用程序是自托管的,并且几乎可以在任何平台上运行,因此它们不再托管在IIS上。默认情况下,.Net Core应用程序设置以Json格式(appsettings.json)存储,而.Net Framework应用程序配置默认web.configXML格式存储在文件中。有关.Net Core应用程序的更多信息,您可以阅读ASP.NET Core中的配置。就我而言,我试图从.Net Core 2.0程序集访问.Net Framework程序集的数据层。为此,无需在.Net Core应用程序中安装System.Configuration.ConfigurationManager软件包,但只需添加app.config到.Net Core程序集,然后向其中添加连接字符串:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="SHOPPINGCNN" connectionString="server=your server name;integrated security=true;database=your database name" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

之后,一切都会正常。确保使用与SHOPPINGCNN.Net Framework应用程序中相同的连接字符串名称(在我的情况下),否则将无法获得所需的结果。我在我的项目中做到了,而且效果100%。


has*_*san 12

在.net核心中,您可以使用它ConfigurationBuilder来读取appsettings.json文件.

你可以实现如下.

appsettings.json样本

{
  "option1": "value1_from_json",
  "option2": 2,

  "ConnectionStrings": {
    "YourConnectionString": "............."
  }
}
Run Code Online (Sandbox Code Playgroud)

C#代码示例

static class YourClass
{
    public static IConfigurationRoot Configuration;

    public static string GetConnectionString()
    {
         var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json");

         Configuration = builder.Build();
         var connectionString = Configuration["ConnectionStrings:YourConnectionString"];

    }

}
Run Code Online (Sandbox Code Playgroud)

  • 我同意你的意见,我们可以将连接字符串存储在`appsettings.json`中,但是当您使用`.Net Core`应用程序连接到数据库时就是这种情况,但在我的情况下,我引用了一个`.Net Framework`应用程序,使用`public static string CONNSTR = ConfigurationManager.ConnectionStrings ["SHOPPINGCNN"].ConnectionString;`在其DataAccess类中尝试使用我的`Core`应用程序中该应用程序的资源,上面的代码将被触发并返回null值,因为`Web.config`文件中不存在连接字符串 (2认同)
  • 我已经解释了为什么我使用旧式配置文件。如果您引用使用“ConfigurationManager.ConnectionStrings”获取连接字符串的 .Net Framework 程序集,您会怎么做?它无法使用 .Net Core 标准获取其连接字符串。你怎么认为? (2认同)
  • @hasan,这很有帮助. (2认同)

Set*_*Set 8

对于.NET Core应用程序,最好的方法是使用Configuration API.这是一种非常灵活的方式,并且由于提供者模式,它允许使用不同的源,而不仅仅是最常见的appsettings.json文件(通过JSON文件的方式,并且可以以随机方式命名):

  • 文件格式(INI,JSON和XML)
  • 命令行参数
  • 环境变量
  • 内存中的.NET对象
  • 加密的用户存储Azure Key Vault
  • 您安装或创建的自定义提供程序

现在约ConfigurationManager.起初,.NET Core不得不忘记这个类 - 它没有实现和支持,而是通过提供新的Configuration API来完全取代它.

而且,实际情况是ASP.NET Core应用程序不再通过IIS托管(IIS现在主要用作反向代理),因此web.config不再那么有用(除非您仍需要定义特定于IIS配置).

但是,在提供.NET Standard 2.0之后,此 System.Configuration.ConfigurationManager nuget包可用并带回ConfigurationManager该类.由于在新的.NET Core 2.0中实现了新的兼容性垫片,因此成为可能.

关于你的情况,很难说为什么你有'null',因为它没有足够的信息:

  • 它可能是web.config中的错误部分
  • web.config可能无法复制到您的输出/发布文件夹中

  • 我添加了`System.Configuration.ConfigurationManager`和Web.config,但仍然无法获得连接字符串. (3认同)
  • 同样在这里,appsettings总是空的 (2认同)

nii*_*ico 6

万一您错过了它-并且因为@Zuhair似乎不想发布答案-这是他们的解决方案的副本粘贴(我最初错过了它,因为它仅在评论中):

我找到了解决方案。我将Web.config的名称更改为app.config,并且能够使用以下命令获取连接字符串:

System.Configuration.ConfigurationManager.ConnectionStrings [“ SHOPPINGCNN”]。ConnectionString

app.config文件如下所示:

<?xml version="1.0"> encoding="utf-8" ?> 
<configuration> 
<connectionStrings> 
<add name="SHOPPINGCNN" connectionString="server=.\SQLEXPRESS;integrated security=true;database=xxxxx" /> 
</connectionStrings> 
</configuration>
Run Code Online (Sandbox Code Playgroud)

您还需要安装此NuGet软件包:

System.Configuration.ConfigurationManager
Run Code Online (Sandbox Code Playgroud)

就我而言,我只是简单地重命名了包含connectionString'app.config'的web.config并成功了。

我意识到这可能不是一个很好的长期解决方案,但是对于混合的旧项目而言,或者让您开始学习.net Core,它非常有用。