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

如何删除路由中的额外路由值?ASP.NET路由配置求助

ASP.NET路由重定向解决方案

你的问题出在当前路由配置允许URL包含额外段时仍匹配到目标页面——MVC路由系统会自动忽略超出路由定义的URL部分,所以PartnerAdmin/Account/RetrievePassword/bla/bla依然会命中Account/RetrievePassword action。下面给你两种可行的解决方法:

方法一:添加精确匹配+捕获重定向路由

在现有默认路由之前添加精确匹配路由,确保只有正确格式的URL能命中目标页面;再添加一个捕获所有额外段的路由,将错误URL重定向到正确地址:

// 1. 精确匹配路由:仅当URL完全匹配时才命中
context.MapRoute(
    name: "RetrievePassword_Exact",
    url: "PartnerAdmin/Account/RetrievePassword",
    defaults: new { controller = "Account", action = "RetrievePassword" }
);

// 2. 保留原有的默认路由
context.MapRoute(
    name: "Partner_default",
    url: "PartnerAdmin/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

// 3. 捕获所有带额外段的错误URL,重定向到正确页面
context.MapRoute(
    name: "RetrievePassword_Redirect",
    url: "PartnerAdmin/Account/RetrievePassword/{*extra}",
    defaults: new { controller = "Account", action = "RedirectToRetrievePassword" }
);

然后在AccountController中添加重定向用的action:

public ActionResult RedirectToRetrievePassword()
{
    // 使用301永久重定向(若需临时重定向可换RedirectToAction)
    return RedirectToActionPermanent("RetrievePassword");
}

方法二:在目标Action内直接检查并重定向

如果不想新增路由,可在RetrievePassword方法内判断URL是否包含额外段,若有则直接重定向:

public ActionResult RetrievePassword()
{
    // 检查URL段数是否超过预期(正确URL应为4段:域名/PartnerAdmin/Account/RetrievePassword)
    if (Request.Url.Segments.Length > 4)
    {
        // 构造正确URL并执行永久重定向
        var correctUrl = Url.Action("RetrievePassword", "Account", null, Request.Url.Scheme);
        return RedirectPermanent(correctUrl);
    }

    // 原页面逻辑
    return View();
}

内容的提问来源于stack exchange,提问作者shubham maini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:23:10