通过config配置文件存储常量值

来源:互联网 发布:淘宝联盟不能提现 编辑:程序博客网 时间:2024/05/01 05:56
当调用接口的时候或者某些系统用到的固定常量值,在开发项目时需要配置的值一般都写在config配置文件中, 
然后通过实例化上下文Context从配置文件中读取值。 

例如:项目系统需要通过http的方式调用Fbdd系统的接口,Fbdd系统提供了接口url以及访问url时的账户和密码, 
如果每次调用Fbdd接口的时候,都将这些值直接赋值到json包,那么会很麻烦,主要体现在: 
(1)每次调用接口,都要给这些字段赋值。 
(2)当url,帐户名或密码发生变化时修改处会很多,很不方便 
(3)安全性很低 
解决方法: 
将这些值写在config配置文件中,然后通过Context上下文获得其值 

例如: 
(1)创建配置文件FbddApi.config,内容如下: 
<?xml version="1.0" encoding="utf-8" ?> 
<apiconfig> 
   <orderUpload> 
    <url>http://xxx.net/API/orderupload&lt;/url
    <account>test001</account> 
    <secure>aaabbb</secure> 
    <setting> 
      <appUid>8910000176182</appUid> 
      <appName>冯剑秋</appName> 
      <appType>1</appType> 
      <appStatus>2</appStatus> 
      <orderType>E</orderType> 
    </setting> 
  </orderUpload> 

 <orderStatusQuery> 
    <url>http://xxx.net/API/orderUploadScheduleQuery&lt;/url
    <account>test001</account> 
    <secure>aaabbb</secure> 
    <setting> 
      <queryCount>50</queryCount> 
      <successStatus>120</successStatus> 
      <waitStatus>1000,1004,1,2,3</waitStatus> 
      <failStatus>4,100</failStatus> 
    </setting> 
  </orderStatusQuery> 
<apiconfig> 

(2)创建访问配置文件的上下文类FbddApiContext.cs 
  • 将需要从config中读取的值所对应的xml标签设置为属性。例如Url,Account,Secure,Setting 
  • 由于setting中的内容标签有时不一样,那么将Setting属性设置为字典,进行读取其中的值,例如:Dictionary<string, string> Setting 
  • 通过上下文Context的构造函数进行赋值 
public class FbddApiContext 

        private string _url; 
        private string _account; 
        private string _secure; 

        public FbddApiContext(string apiType) 
        { 
            //读取配置文件 
            string xmlPath = Path.Combine(HostingEnvironment.MapPath("/content/config"), "FbddApi.config"); 
            XDocument xDoc = XDocument.Load(xmlPath, LoadOptions.None); 
            XElement root = xDoc.Element("apiconfig"); 
if (apiType == "orderUpload") 
            { 
                XElement applyRoot = root.Element("orderUpload"); 
                //获取根节点下的元素 
                XElement x1 = applyRoot.Element("url"); 
                XElement x2 = applyRoot.Element("account"); 
                XElement x3 = applyRoot.Element("secure"); 
                _url = x1.Value; 
                _account = x2.Value; 
                _secure = x3.Value; 

                //其他参数设置,设置Setting字典 
                GetSetting(applyRoot.Element("setting")); 
            } 
            else if (apiType == "orderStatusQuery") 
            { 
                XElement applyRoot = root.Element("orderStatusQuery"); 
                //获取根节点下的元素 
                XElement x1 = applyRoot.Element("url"); 
                XElement x2 = applyRoot.Element("account"); 
                XElement x3 = applyRoot.Element("secure"); 
                _url = x1.Value; 
                _account = x2.Value; 
                _secure = x3.Value; 

                GetSetting(applyRoot.Element("setting")); 
            } 


        /// <summary> 
        /// 接口地址 
        /// </summary> 
        public string Url 
        { 
            get 
            { 
                return _url; 
            } 
        } 
        /// <summary> 
        /// 账号 
        /// </summary> 
        public string Account 
        { 
            get 
            { 
                return _account; 
            } 
        } 
        /// <summary> 
        /// 密码 
        /// </summary> 
        public string Secure 
        { 
            get 
            { 
                return _secure; 
            } 
        } 

        private Dictionary<string, string> _setting = new Dictionary<string, string>(); 
        /// <summary> 
        /// 其他设置 
        /// </summary> 
        public Dictionary<string, string> Setting 
        { 
            get 
            { 
                return _setting; 
            } 
        } 

         /// <summary> 
        /// 设置Setting字典 
        /// </summary> 
        protected void GetSetting(XElement settingNode) 
        { 
            if (settingNode == null) 
            { 
                return; 
            } 

            settingNode.Elements().ToList().ForEach(i => _setting.Add(i.Name.ToString(), i.Value)); 
        } 



(3)调用Fbdd接口时,通过创建Context上下文实例初始化各属性的值 
var context = new FbddApiContext("orderAuditQuery");//读取orderAuditQuery下的标签值 
context.Setting["appUid"],//读取Setting中的标签值,字典取值的方法 
0 0
原创粉丝点击