C#如何读取非web.config的用户自定义Configuration配置文件
解决办法
1. 配置文件路径通用获取
Web项目的IIS进程工作目录不是项目根目录,直接传相对路径会默认定位到IIS Express安装目录。用HostingEnvironment.MapPath方法可以映射站点内的虚拟路径到物理绝对路径,本地调试和服务器部署都通用:
string configPath = HostingEnvironment.MapPath("~/AppData/CMS/Configurations/oneABC.config");
需要提前引用命名空间System.Web.Hosting,该方法不需要依赖当前请求上下文,静态方法里也可以正常调用。
2. 自定义XML配置读取
你的oneABC.config不属于标准的.NET配置节结构,用ConfigurationManager读取AppSettingsSection的方式不适用,直接用XML解析更简单灵活,适配动态增减的add节点。
注意:你提供的oneABC.config存在根节点首尾不匹配的问题,需要先修正为闭合标签一致,比如把结束标签改为
</oneABC>,否则XML加载会报错。
完整实现代码
using System.IO; using System.Xml.Linq; using System.Web.Hosting; using System.Globalization; using System.Linq; public static bool GetConfigurationValue(string culture) { // 1. 映射得到配置文件的绝对物理路径 string configPath = HostingEnvironment.MapPath("~/AppData/CMS/Configurations/oneABC.config"); if (!File.Exists(configPath)) { // 配置文件不存在的情况,可按业务需求返回默认值 return false; } try { // 2. 加载XML文件 XDocument xDoc = XDocument.Load(configPath); // 3. 把传入的culture转大写,匹配配置中的code格式 string targetCode = culture.Trim().ToUpper(CultureInfo.InvariantCulture); // 4. 查找匹配code的add节点 var targetNode = xDoc.Descendants("add") .FirstOrDefault(node => node.Attribute("code")?.Value?.ToUpper(CultureInfo.InvariantCulture) == targetCode); if (targetNode == null) { // 未找到对应国家配置,返回默认值 return false; } // 5. 读取view属性转为布尔值返回 if (bool.TryParse(targetNode.Attribute("view")?.Value, out bool viewValue)) { return viewValue; } return false; } catch { // XML解析异常的兜底处理,可按业务需求调整 return false; } }
内容的提问来源于stack exchange,提问作者robin saxena
相关产品推荐
相关产品推荐

