2017-10-29 180 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

相關問題