Asp.Net 常用工具类---Config操作(7)
近期工作比较忙,忙到忘记写博客(自己的借口,主要加班下班后不想动)。
月初的时候,打算每两天写一篇博文,分享自己的一些心得和开发体验,无奈现在只写到第六篇,然而时间已经是20号,岁月不饶人!
总想写点什么,但是有时候文笔可能不咋样,排版也不是很讲究,写的碎碎的。
虽然阅读量、推荐量不高,但是我感觉做事就要持之以恒,保持分享精神!
上一篇写了一些office的操作,包括excel word html pdf,现在想想,确实有点粗糙,不够精炼。
今天准备写一篇关于config文件的基本操作,包括:链接字符串,appSettings操作,运行地址等等。
大家都知道,有时候一些sdk信息账户为了可配置化,除了存库以外,webconfig的配置更能方便简介,且容易维护!
下面贴出我的帮助类(借鉴了cyqdata的帮助类,然后做了一些修改):
using System; using System.Configuration; using System.Web; using System.Collections.Generic; using System.Reflection; namespace Utils.Config { /// <summary> /// 配置文件 /// </summary> public static class Config { /// <summary> /// 配置字典 /// </summary> public static readonly Dictionary<string, string> Configs = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); /// <summary> /// 链接字符串配置字典 /// </summary> public static readonly Dictionary<string, string> ConnConfigs = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); /// <summary> /// 文件路径前缀 /// </summary> public const string FilePre = "file:\\"; /// <summary> /// 框架的运行路径 /// </summary> public static string RunfolderPath; /// <summary> /// 框架程序集名称 /// </summary> public static string DllFullName; /// <summary> /// 链接字符串 /// </summary> public static string _defaultConn; /// <summary> /// 获取当前Dll的版本号 /// </summary> public static string Version => Assembly.GetExecutingAssembly().GetName().Version.ToString(); /// <summary> /// Web根目录 /// </summary> public static string WebRootPath => AppDomain.CurrentDomain.BaseDirectory; /// <summary> /// 浏览器地址 (协议名+域名+站点名+文件名+参数) /// </summary> public static Uri WebUr => HttpContext.Current.Request.Url; /// <summary> /// 框架的运行路径 /// </summary> public static string RunPath { get { if (string.IsNullOrEmpty(RunfolderPath)) { Assembly ass = Assembly.GetExecutingAssembly(); DllFullName = ass.FullName; RunfolderPath = ass.CodeBase; RunfolderPath = System.IO.Path.GetDirectoryName(RunfolderPath).Replace(FilePre, string.Empty) + "\\"; } return RunfolderPath; } } /// <summary> /// 设置Web.config或App.config的值。 /// </summary> public static void SetApp(string key, string value) { try { if (Configs.ContainsKey(key)) Configs[key] = value; else Configs.Add(key, value); } catch (Exception err) { Log.Log.Txt(err); } } /// <summary> /// 获取Web.config或App.config的值。 /// </summary> public static string GetApp(string key) { return GetApp(key, string.Empty); } /// <summary> /// 获取Web.config或App.config的值(允许值不存在或为空时输出默认值)。 /// </summary> public static string GetApp(string key, string defaultValue, string filepath = "") { if (Configs.ContainsKey(key)) return Configs[key]; else if (!string.IsNullOrEmpty(filepath)) { ExeConfigurationFileMap ecf = new ExeConfigurationFileMap(); ecf.ExeConfigFilename = filepath; Configuration config = ConfigurationManager.OpenMappedExeConfiguration(ecf, ConfigurationUserLevel.None); return config.AppSettings.Settings[key].Value; } else { string value = ConfigurationManager.AppSettings[key]; value = string.IsNullOrEmpty(value) ? defaultValue : value; try { Configs.Add(key, value); } catch (Exception err) { Log.Log.Txt(err); } return value; } } /// <summary> /// 获取Web.config或App.config的数字值(允许值不存在或为空时输出默认值)。 /// </summary> public static int GetAppInt(string key, int defaultValue) { int result; string value = GetApp(key); if (!int.TryParse(value, out result)) return defaultValue; return result; } /// <summary> /// 获取Web.config或App.config的数字值(允许值不存在或为空时输出默认值)。 /// </summary> public static bool GetAppBool(string key, bool defaultValue) { bool result; bool.TryParse(GetApp(key, defaultValue.ToString()), out result); return result; } /// <summary> /// 获取Web.config或App.config的connectionStrings节点的值。 /// </summary> public static string GetConn(string name, out string providerName) { providerName = string.Empty; if (string.IsNullOrEmpty(name)) name = "Default"; if (name.Trim().Contains(" ")) return name; if (ConnConfigs.ContainsKey(name)) return ConnConfigs[name]; ConnectionStringSettings conn = ConfigurationManager.ConnectionStrings[name]; if (conn != null) { providerName = conn.ProviderName; if (name == conn.ConnectionString)//避免误写自己造成死循环。 return name; name = conn.ConnectionString; if (!string.IsNullOrEmpty(name) && name.Length < 32 && name.Split(' ').Length == 1) return GetConn(name); if (!ConnConfigs.ContainsKey(name) && string.IsNullOrEmpty(providerName)) // 如果有providerName,则不存档 ConnConfigs.Add(name, conn.ConnectionString); return conn.ConnectionString; } if (name.Length > 32 && name.Split('=').Length > 3 && name.Contains(";")) //链接字符串很长,没空格的情况 return name; return ""; } /// <summary> /// 获取Web.config或App.config的connectionStrings节点的值。 /// </summary> public static string GetConn(string name) { string p; return GetConn(name, out p); } /// <summary> /// 添加自定义链接(内存有效,并未写入config文件) /// </summary> /// <param name="name">名称</param> /// <param name="connectionString">链接字符串</param> public static void SetConn(string name, string connectionString) { if (!ConnConfigs.ContainsKey(name)) ConnConfigs.Add(name, connectionString); else ConnConfigs[name] = connectionString; } /// <summary> /// 获取URL /// </summary> public static string Url { get { string pageUrl = string.Empty; if (HttpContext.Current != null) { HttpRequest request = HttpContext.Current.Request; if (request.UrlReferrer != null && request.Url != request.UrlReferrer) pageUrl = request.Url.Scheme + "://" + request.Url.Authority + request.RawUrl + request.UrlReferrer; else pageUrl = request.Url.Scheme + "://" + request.Url.Authority + request.RawUrl; } return pageUrl; } } /// <summary> /// 数据库链接字符串 /// </summary> public static string DefaultConn { get { if (string.IsNullOrEmpty(_defaultConn)) { _defaultConn = "Defalut"; if (ConfigurationManager.ConnectionStrings != null && ConfigurationManager.ConnectionStrings[_defaultConn] == null) { foreach (ConnectionStringSettings item in ConfigurationManager.ConnectionStrings) { if (item.Name.ToLower().EndsWith("Defalut")) { _defaultConn = item.Name; break; } } } } return _defaultConn; } set { if (value == null) value = string.Empty; _defaultConn = value; } } /// <summary> /// 生成一个文件夹路径 /// </summary> /// <param name="foldername">文件夹名称</param> /// <param name="configkey">config配置key</param> public static string GenerateFilePath(string foldername, string configkey = "") { string path = GetApp(configkey, foldername); if (!path.EndsWith("\\")) path = path.TrimEnd('/'); if (path.StartsWith("~/")) path = path.Substring(2); string folder = Config.WebRootPath; folder = folder + path + @"\"; if (!System.IO.Directory.Exists(folder)) System.IO.Directory.CreateDirectory(folder); return folder; } } }
OK,各位看官,这一期的文章config操作写到这里喏,感谢大家的支持,您的支持是我的动力!
下一期给大家带来的是常用的Log帮助类,敬请期待!!!