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

.NET Core 8.0路由优化:旧.aspx与废弃文件夹请求重定向咨询

推荐的.NET Core 8.0废弃文件夹重定向方案

针对你需要批量处理废弃文件夹重定向、避免重复路由规则的需求,以下是两种易维护的实现方案:


方案一:自定义路由约束(适合特定HTTP方法的重定向)

通过配置文件维护废弃文件夹列表,搭配自定义路由约束实现批量匹配,无需重复编写路由规则。

  1. 配置废弃文件夹列表
    在appsettings.json中添加配置项,后续只需修改此文件即可更新废弃文件夹:
"RedirectSettings": {
  "AbandonedFolders": [ "old-docs", "archive-2022", "deprecated-api", "legacy-admin" ]
}
  1. 实现自定义路由约束
    创建约束类匹配配置中的废弃文件夹:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;

public class AbandonedFolderConstraint : IRouteConstraint
{
    private readonly HashSet<string> _abandonedFolders;

    public AbandonedFolderConstraint(IConfiguration configuration)
    {
        _abandonedFolders = new HashSet<string>(
            configuration.GetSection("RedirectSettings:AbandonedFolders").Get<string[]>() ?? Array.Empty<string>(),
            StringComparer.OrdinalIgnoreCase);
    }

    public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
    {
        if (values.TryGetValue(routeKey, out var value) && value is string folderName)
        {
            return _abandonedFolders.Contains(folderName);
        }
        return false;
    }
}
  1. 注册约束并添加路由规则
    在Program.cs中注册约束,然后添加一条通用路由规则:
// 注册自定义约束
builder.Services.AddRouting(options =>
{
    options.ConstraintMap.Add("abandoned-folder", typeof(AbandonedFolderConstraint));
});

// 添加重定向路由
app.Map("{folder:abandoned-folder}/{*rest}", (HttpContext context) =>
{
    // 替换为你的目标重定向URL,permanent设为true表示永久重定向(301)
    return Results.Redirect("/new-target-page", permanent: true);
});

方案二:全局中间件(适合所有HTTP方法的重定向)

通过中间件拦截所有请求,检查请求路径是否命中废弃文件夹,灵活性更强,支持处理GET/POST等所有请求方法。

  1. 复用上述appsettings.json配置

  2. 实现重定向中间件

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;

public class AbandonedFolderRedirectMiddleware
{
    private readonly RequestDelegate _next;
    private readonly HashSet<string> _abandonedFolders;

    public AbandonedFolderRedirectMiddleware(RequestDelegate next, IConfiguration configuration)
    {
        _next = next;
        _abandonedFolders = new HashSet<string>(
            configuration.GetSection("RedirectSettings:AbandonedFolders").Get<string[]>() ?? Array.Empty<string>(),
            StringComparer.OrdinalIgnoreCase);
    }

    public async Task InvokeAsync(HttpContext context)
    {
        var pathSegments = context.Request.Path.Value?.Split('/', StringSplitOptions.RemoveEmptyEntries);
        if (pathSegments != null && pathSegments.Length > 0 && _abandonedFolders.Contains(pathSegments[0]))
        {
            context.Response.Redirect("/new-target-page", permanent: true);
            return;
        }

        await _next(context);
    }
}
  1. 注册中间件
    在Program.cs中添加中间件(注意顺序要放在路由中间件之前):
app.UseMiddleware<AbandonedFolderRedirectMiddleware>();

app.UseRouting();
// 其他中间件及路由配置

方案对比

  • 若只需处理GET请求,优先选择自定义路由约束,与现有路由体系融合更自然。
  • 若需要拦截所有HTTP方法的请求,或者需要更复杂的路径校验逻辑,选择全局中间件更合适。
  • 两种方案均通过配置文件维护废弃列表,后续更新无需修改业务代码,维护成本极低。

内容的提问来源于stack exchange,提问作者Rajiv Ranjan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:52:08