You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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里的键值对:
    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;
        // 这里处理你的业务逻辑
    }
    
    这个方法的好处是能自动识别web.config对RedirectMapping.config的引用,不需要手动指定文件路径,还能处理配置的重载。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:36:05