.NET运行时读取RedirectMapping.config键值对的方法及API查询
嘿,这个问题我刚好折腾过,来给你详细说说怎么搞!
核心结论
其实.NET里有现成的API可以用,当然你也可以选择更轻量的XML直接解析方式,取决于你的场景和.NET版本。下面分两种主流场景给你拆解:
一、.NET Framework 环境(传统ASP.NET)
1. 用官方的IIS管理API(现成方案)
微软提供了Microsoft.Web.Administration库,专门用来操作IIS相关的配置,包括URL Rewrite的映射文件,这是最“正规”的现成方案:
- 首先通过NuGet安装这个包:
Install-Package Microsoft.Web.Administration - 然后用下面的代码读取RedirectMapping.config里的键值对:
这个方法的好处是能自动识别web.config对RedirectMapping.config的引用,不需要手动指定文件路径,还能处理配置的重载。using Microsoft.Web.Administration; // 初始化服务器管理器,自动关联当前站点的配置 var serverManager = new ServerManager(); var currentSite = serverManager.Sites.First(s => s.Name == System.Web.Hosting.HostingEnvironment.SiteName); var webConfig = currentSite.GetWebConfiguration(); // 获取rewriteMaps配置节,找到你定义的映射名称 var rewriteMapsSection = webConfig.GetSection("system.webServer/rewrite/rewriteMaps"); var targetMap = rewriteMapsSection.GetCollection().First(m => m.Attributes["name"].Value == "你的映射名称"); // 遍历所有键值对 foreach (var mapEntry in targetMap.GetCollection()) { string oldUrl = mapEntry.Attributes["key"].Value; string newUrl = mapEntry.Attributes["value"].Value; // 这里处理你的业务逻辑 }
2. 轻量方案:直接解析XML文件
如果不想加额外依赖,直接把RedirectMapping.config当成普通XML文件读取就行,毕竟它本身就是标准XML格式:
using System.Xml.Linq; // 获取文件的物理路径 var mapFilePath = System.Web.HttpContext.Current.Server.MapPath("~/RedirectMapping.config"); var xmlDoc = XDocument.Load(mapFilePath); // 提取键值对成字典 var redirectMappings = xmlDoc.Descendants("add") .ToDictionary( element => element.Attribute("key").Value, element => element.Attribute("value").Value ); // 直接用redirectMappings字典就行
二、.NET Core/.NET 5+ 环境
如果是用新版本的.NET,虽然没有传统的web.config(部署到IIS时会生成用于适配的web.config),但同样可以用两种方式:
1. 利用.NET配置系统加载XML
新版本的配置系统支持加载XML文件,你可以把RedirectMapping.config当成一个配置源:
using Microsoft.Extensions.Configuration; var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddXmlFile("RedirectMapping.config", reloadOnChange: true); var config = configBuilder.Build(); // 读取映射节点 var mappings = config.GetSection("rewriteMaps:rewriteMap:add") .GetChildren() .ToDictionary(c => c["key"], c => c["value"]);
2. 同样适用XML直接解析
和.NET Framework的轻量方案几乎一样,只是获取文件路径的方式换成用IWebHostEnvironment:
using System.Xml.Linq; using Microsoft.AspNetCore.Hosting; // 注入IWebHostEnvironment private readonly IWebHostEnvironment _env; public YourService(IWebHostEnvironment env) { _env = env; } // 读取文件 var mapFilePath = Path.Combine(_env.ContentRootPath, "RedirectMapping.config"); var xmlDoc = XDocument.Load(mapFilePath); var redirectMappings = xmlDoc.Descendants("add") .ToDictionary(e => e.Attribute("key").Value, e => e.Attribute("value").Value);
关于读取web.config里的rewrite节点
不管是哪个.NET版本,读取web.config的rewrite节点的思路和上面一致:
- 用
Microsoft.Web.Administration(仅.NET Framework)可以直接获取强类型的配置节; - 或者直接解析web.config的XML结构,定位到
system.webServer/rewrite节点提取内容。
内容的提问来源于stack exchange,提问作者Payam
相关产品推荐
相关产品推荐

