近期工作比较忙,忙到忘记写博客(自己的借口,主要加班下班后不想动)。

  月初的时候,打算每两天写一篇博文,分享自己的一些心得和开发体验,无奈现在只写到第六篇,然而时间已经是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 < && name.Split(' ').Length == )
return GetConn(name);
if (!ConnConfigs.ContainsKey(name) && string.IsNullOrEmpty(providerName)) // 如果有providerName,则不存档
ConnConfigs.Add(name, conn.ConnectionString);
return conn.ConnectionString;
}
if (name.Length > && name.Split('=').Length > && 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(); string folder = Config.WebRootPath;
folder = folder + path + @"\"; if (!System.IO.Directory.Exists(folder))
System.IO.Directory.CreateDirectory(folder);
return folder;
}
}
}

OK,各位看官,这一期的文章config操作写到这里喏,感谢大家的支持,您的支持是我的动力!

下一期给大家带来的是常用的Log帮助类,敬请期待!!!

  

Asp.Net 常用工具类---Config操作(7)的更多相关文章

  1. [C#] 常用工具类——文件操作类

    /// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...

  2. C#常用工具类——Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  3. C#常用工具类——Excel操作类(ZT)

    本文转载于: http://www.cnblogs.com/zfanlong1314/p/3916047.html /// 常用工具类——Excel操作类 /// <para> ----- ...

  4. Asp.Net 常用工具类之Office-文档操作(6)

    文档一直是老大难问题,君不知,代码用时方恨少!有一套成熟的文件帮助类能很大程度上减少寻找各种资料的时间. 记得以前做一个业务,需要导出协议,一份可编辑,一份不可编辑.那么Word和PDF是最好的选择, ...

  5. Asp.Net 常用工具类之Office—Excel导出(4)

    开发过程中各类报表导入导出防不胜防,网上也是各种解决方法层出不穷,比如Excel,CSV,Word,PDF,HTML等等... 网上各种导出插件也是层出不穷,NPOI,微软Microsoft.Offi ...

  6. Asp.Net 常用工具类之Office—Excel导入(5)

    之前在做一个项目的时候,客户方面只提供了一份简单的Excel文件,且要跟现有数据进行对接. 当时想到的是如果数据量不大,可以Excel一条一条加进去,无奈数据有几十兆!!! 换了一种思维,进行了导入: ...

  7. Asp.Net 常用工具类之加密——非对称加密RSA算法

    踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...

  8. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  9. PHP常用工具类

    <?php namespace isslib\Util; use think\Config; /** * 常用工具类 * User: xaxiong * Date: 2016/12/19 * T ...

随机推荐

  1. Bezier(贝塞尔)曲线简介

    在计算机图形学中,Bezier曲线被广泛用于对平滑的曲线进行建模,对其有适当的了解是必要的.一条Bezier曲线由一系列控制点定义,称为曲线的阶数,由此可知,使用两个控制点()可以定义一条一阶Bezi ...

  2. 在C++中反射调用.NET(三)

    在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ...

  3. ThreadLocal模式的原理

    在JDK的早期版本中,提供了一种解决多线程并发问题的方案:java.lang.ThreadLocal类.ThreadLocal类在维护变量时,实际使用了当前线程(Thread)中的一个叫做Thread ...

  4. (@WhiteTaken)设计模式学习——单例模式

    单例模式,个人理解就是,使用了这个模式,可以保证一个类只生成唯一的实例对象.就是在整个程序中,这个类只存在一个实例对象. GoF对单例模式的定义:保证一个类,只有一个实例存在,同时提供能对该实例加以访 ...

  5. request和response对象的具体介绍

    Request 对象 - request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性.常见属性有:    req.app:当callback为外部文件时,用req ...

  6. phpcms如何做企业站--> 替换首页最初操作

    首先用一个静态首页的模板,通过cms进行替换做成一个有后台的 首页的替换流程首先要先把静态网页做出来,拿这个页面去替换 页面所有的文件都在这,做静态页面的文件 现在要做的是把这些文件复制一下拿到php ...

  7. ArcObjects与ArcEngine的联系与区别

    ArcObjects与ArcEngine的联系与区别 AO一般指的是桌面产品开发组件,需要在桌面环境中才能够使用,最典型的就是嵌入式VBA开发.但是这样带来的弊端和OFFICE等相关软件一样明显,就是 ...

  8. asp.net core mvc剖析:mvc执行过程(一)

    前面介绍了路由的过程,我们再来看下MvcRouteHandler的代码: public Task RouteAsync(RouteContext context) { ...... //根据路由信息查 ...

  9. DEV下拉框LookUpEdit使用技巧

    1,首先设置LookUpEdit要绑定的列,并配置隐藏列 2,设置下拉框是否显示表头,底部 3.设置下拉框宽度 4.设置显示的列与值列 5.设置初始值 6,绑定数据 7,取值  

  10. synchronized和lock比较浅析

    synchronized是基于jvm底层实现的数据同步,lock是基于Java编写,主要通过硬件依赖CPU指令实现数据同步.下面一一介绍 一.synchronized的实现方案 1.synchroni ...