天天看點

一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)

一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)

Web.config的讀取 對于Web.config的讀取大家都很屬性了。平時我們用得比較多的就是appSettings節點下配置。如: 我們對應的代碼是: 是的,很簡單、很友善、很清晰。可以總感覺缺少那麼一點“面向對象”的感覺。少還無所謂,如果幾十個上百個呢?我們是不是可以考慮分類定義,如下: 可

Web.config的讀取

對于Web.config的讀取大家都很屬性了。平時我們用得比較多的就是appSettings節點下配置。如:

一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)

我們對應的代碼是:

= ConfigurationManager.AppSettings[“OAuth_QQ_ClientId”]; 
= ConfigurationManager.AppSettings[“OAuth_QQ_CallbackUrl”];
= ConfigurationManager.AppSettings[“OAuth_QQ_ClientScrert”];
= ConfigurationManager.AppSettings[“OAuth_Sina_ClientId”];
= ConfigurationManager.AppSettings[“OAuth_Sina_ClientScrert”];
= ConfigurationManager.AppSettings[“OAuth_Sina_CallbackUrl”];
........      

 是的,很簡單、很友善、很清晰。可以總感覺缺少那麼一點“面向對象”的感覺。少還無所謂,如果幾十個上百個呢?我們是不是可以考慮分類定義,如下:

<!--自定義配置-->
  <customCon>
    <!--郵件配置-->
    <mail mailPwd="" mailHost="" mailFrom="" />
    <!--QQ登陸-->
    <oAuthQQ OAuth_QQ_ClientId="" OAuth_QQ_ClientScrert="" OAuth_QQ_CallbackUrl="haojima.net/hi_login.html" />
    <!--新浪登入-->
    <oAuthSina OAuth_Sina_ClientId="" OAuth_Sina_ClientScrert="" OAuth_Sina_CallbackUrl="haojima.net/hi_login.html" />
  </customCon>      

 可是,你會發現 customCon 編輯器不認,因為這是我自己定義的一個,那如何是好?如下:(申明自定義标簽)

一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)

如此,是不是感覺分類更清楚了?可是問題又來了,那我們怎麼讀取自定義标簽裡面的值呢?

首先:(注意:需要繼承ConfigurationSection)

/// <summary>
    /// 自定義配置
    /// </summary>
    public class CustomCon : ConfigurationSection
    {
        /// <summary>
        /// 郵箱設定
        /// </summary>
        [ConfigurationProperty("mail", IsRequired = true)]
        public MailElement Mail
        {
            get { return (MailElement)this["mail"]; }
        }

        /// <summary>
        /// qq登入
        /// </summary>
        [ConfigurationProperty("oAuthQQ", IsRequired = true)]
        public OAuthQQElement OAuthQQ
        {
            get { return (OAuthQQElement)this["oAuthQQ"]; }
        }

        /// <summary>
        /// 新浪登入
        /// </summary>
        [ConfigurationProperty("oAuthSina", IsRequired = true)]
        public OAuthSinaElement OAuthSina
        {
            get { return (OAuthSinaElement)this["oAuthSina"]; }
        }
    }       

然後MailElement、OAuthQQElement、OAuthSinaElement 分别具體定義:

一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)
一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)
#region MailElement(郵箱)
    public class MailElement : ConfigurationElement
    {
        /// <summary>
        /// 發件人密碼
        /// </summary>
        [ConfigurationProperty("mailPwd", IsRequired = true)]
        public string Pwd
        {
            get { return this["mailPwd"].ToString(); }
            set { this["mailPwd"] = value; }
        }

        /// <summary>
        /// SMTP郵件伺服器
        /// </summary>
        [ConfigurationProperty("mailHost", IsRequired = true)]
        public string Host
        {
            get { return this["mailHost"].ToString(); }
            set { this["mailHost"] = value; }
        }

        /// <summary>
        ///發件人郵箱
        /// </summary>
        [ConfigurationProperty("mailFrom", IsRequired = true)]
        public string From
        {
            get { return this["mailFrom"].ToString(); }
            set { this["mailFrom"] = value; }
        }
    }
    #endregion

    #region OAuthQQElement(QQ)
    public class OAuthQQElement : ConfigurationElement
    {

        [ConfigurationProperty("OAuth_QQ_ClientId", IsRequired = true)]
        public string ClientId
        {
            get { return this["OAuth_QQ_ClientId"].ToString(); }
            set { this["OAuth_QQ_ClientId"] = value; }
        }


        [ConfigurationProperty("OAuth_QQ_ClientScrert", IsRequired = true)]
        public string ClientScrert
        {
            get { return this["OAuth_QQ_ClientScrert"].ToString(); }
            set { this["OAuth_QQ_ClientScrert"] = value; }
        }


        [ConfigurationProperty("OAuth_QQ_CallbackUrl", IsRequired = true)]
        public string CallbackUrl
        {
            get { return this["OAuth_QQ_CallbackUrl"].ToString(); }
            set { this["OAuth_QQ_CallbackUrl"] = value; }
        }
    }
    #endregion

    #region OAuthSinaElement(新浪)
    public class OAuthSinaElement : ConfigurationElement
    {

        [ConfigurationProperty("OAuth_Sina_ClientId", IsRequired = true)]
        public string ClientId
        {
            get { return this["OAuth_Sina_ClientId"].ToString(); }
            set { this["OAuth_Sina_ClientId"] = value; }
        }


        [ConfigurationProperty("OAuth_Sina_ClientScrert", IsRequired = true)]
        public string ClientScrert
        {
            get { return this["OAuth_Sina_ClientScrert"].ToString(); }
            set { this["OAuth_Sina_ClientScrert"] = value; }
        }


        [ConfigurationProperty("OAuth_Sina_CallbackUrl", IsRequired = true)]
        public string CallbackUrl
        {
            get { return this["OAuth_Sina_CallbackUrl"].ToString(); }
            set { this["OAuth_Sina_CallbackUrl"] = value; }
        }
    }
    #endregion      

View Code

到現在為止,我們在代碼層面已經建立和config一一對應的關聯了。下面我們來取值:

CustomCon custom = (CustomCon)ConfigurationManager.GetSection("customCon");
 var url = custom.OAuthQQ.CallbackUrl;//擷取值
 var id = custom.OAuthQQ.ClientId;//擷取值
 //、、、、、      

如此是不是甚爽,比原先的 appSettings 更有“對象”的感覺了吧。且,當你配置過多的時候分類也更加清晰!

Web.config的寫入

 對于Web.config的寫入需求一般很少,多數都隻是讀取。那為什麼我這裡要說寫入呢?因為好多人問我“這個部落格系統的資料庫在哪裡?”,每次都解釋的'不亦樂乎',"這個是coder first根據代碼生成資料庫",後來次數多了實在受不了了。考慮着,是否可以做個引導頁面,初次使用的時候提示設定資料庫和郵箱什麼的(這樣的話對于沒有程式設計基礎的人搭建自己的部落格系統也降低了門檻)。

一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)

第一次啟動程式的時候檢查資料庫連接配接,沒有就進入引導頁面,設定。(這個過程都不用去編輯Web.config檔案了)

好了,看了上面的效果圖我們繼續來看是怎麼把資料寫入到Web.config檔案的吧。

其實很簡單,稍微改下上面代碼:

一步步開發自己的部落格 .NET版(11、Web.config檔案的讀取和修改)

改成通過 WebConfigurationManager.OpenWebConfiguration 來讀取代碼就可以編輯了。不過不要忘了 config.Save(); 才會真正更新到Web.config裡面去。

到這裡還隻能修改我們自定義的節點資料。我們最最主要的是想更新資料庫連接配接,請看下面對資料庫連接配接的操作:

/// <summary>
/// 修改資料庫連接配接
/// </summary>
/// <param name="key"></param>
/// <param name="connectionString"></param>
/// <param name="providerName"></param>
public static void SetConnectionString(string key, string connectionString, string providerName = "System.Data.SqlClient")
{
    ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
    if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此節點,則添加  
    {
        ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString, providerName);
        connectionSetting.ConnectionStrings.Add(connectionStringSettings);
    }
    else//如果存在此節點,則修改  
    {
        connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
        connectionSetting.ConnectionStrings[key].ProviderName = providerName;
    }
    config.Save();
}      

其實,細看和我們上面的代碼大同小異。(隻是把我們自定義的類改成了 ConnectionStringsSection .net預設的連接配接對象) 

《一步步搭建自己的部落格》

好了,以上都是胡說八道。

主要是說下思路,大家自由發揮。感謝您的閱讀,希望對您有一點點作用!

文章首鍊:http://www.cnblogs.com/zhaopei/p/5677053.html

  • 學習本是一個不斷抄襲、模仿、練習、創新的過程。
  • 雖然,園中已有本人無法超越的同主題博文,為什麼還是要寫。
  • 對于自己,博文隻是總結。在總結的過程發現問題,解決問題。
  • 對于他人,在此過程如果還能附帶幫助他人,那就再好不過了。
  • 由于部落客能力有限,文中可能存在描述不正确,歡迎指正、補充!
  • 感謝您的閱讀。如果文章對您有用,那麼請輕輕點個贊,以資鼓勵。
  • 工控物聯Q群:995475200

繼續閱讀