2017-10-29 182 views
2

我已经创建了一个.Net核心API,并且我引用了一个.Net框架应用程序。所引用的应用程序连接到数据库和它的连接字符串存储在web.config文件:如何在.Net核心应用程序中读取web.config文件

string CONNSTR =ConfigurationManager.ConnectionStrings["SHOPPINGCNN"].ConnectionString; 

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

+0

您可以添加一个网络配置 – Shyju

+0

我已经没有,但我没有得到连接字符串 – Zuhair

+0

那就更.NET的核心应用在appsettings.json中存储连接字符串的方法。 – Ignas

回答

2

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

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

现在关于ConfigurationManager。起初,.NET Core被迫忘了这个类 - 它没有被实现和支持,并且想法是通过提供新的配置API来完全取代它。此外,现实情况是,ASP.NET Core应用程序不再通过IIS托管(IIS现在主要用作反向代理),所以web.config不再有用了(除非您还需要很少的情况定义特定于IIS配置的参数)。

虽然在提供.NET标准2.0之后,此System.Configuration.ConfigurationManager nuget包可用,并且带回了ConfigurationManager类。由于在新的.NET Core 2.0中实现了新的compatibility shim,因此变得可能。

关于你的情况下,很难说为什么你有“空”,因为它没有足够的信息:

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

我加了 'System.Configuration.ConfigurationManager' 以及Web.config,但仍然无法获取连接字符串。 – Zuhair

2

in .net core您可以使用ConfigurationBuilder来阅读appsettings.json文件。

您可以像下面这样实施。

appsettings。JSON样本

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

    "ConnectionStrings": { 
    "YourConnectionString": "............." 
    } 
} 

C#代码示例

class YourClass 
{ 
    public static IConfigurationRoot Configuration; 

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

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

    } 

} 
+0

我同意你的意见,我们可以在'appsettings.json'中存储连接字符串,但是当你使用'.Net Core'应用程序连接到一个数据库时,但在我的情况下,我引用一个'.Net Framework'应用,它使用 '公共静态字符串CONNSTR = ConfigurationManager.ConnectionStrings [“SHOPPINGCNN”]的ConnectionString;' 在其数据访问类 从而试图在我的'Core'应用上面的代码将要使用的资源从该应用程序被触发并会返回空值,因为'Web.config'文件中没有连接字符串 – Zuhair

+0

@Zhahair在最佳实践中保持连接字符串,您应该尝试将其保存在作为默认配置文件的appsettings.json文件中.net核心 – hasan

+0

我已经解释过了为什么我使用旧式的配置文件。如果你正在引用使用'ConfigurationManager.ConnectionStrings'获取连接字符串的.Net Framework程序集,你会怎么做?它无法使用.Net核心标准获取其连接字符串。你怎么看? – Zuhair

相关问题