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

ASP.NET MVC 5中如何将/Home/AGM重定向至简洁URL /agm并更新地址栏

解决ASP.NET MVC 5旧URL自动重定向到新简洁URL的问题

好的,这个需求很合理——你已经搞定了新的短URL访问,现在就差让旧的/Home/AGM自动跳转到/agm,同时更新地址栏对吧?这里有两个实用的方案,你可以根据项目情况选择:

方案1:自定义Action过滤器(推荐,解耦业务逻辑)

这个方法不用改动原有的AGM动作方法代码,而是通过过滤器来处理重定向逻辑,更符合MVC的设计思想。

首先创建一个自定义过滤器类:

using System.Web.Mvc;

public class RedirectToCanonicalUrlAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.HttpContext.Request;
        // 检查当前请求的URL是否是旧的格式
        if (request.Url.AbsolutePath.Equals("/Home/AGM", System.StringComparison.OrdinalIgnoreCase))
        {
            // 用301永久重定向(对SEO友好,搜索引擎会更新索引)
            filterContext.Result = new RedirectResult("/agm", permanent: true);
        }
        base.OnActionExecuting(filterContext);
    }
}

然后把这个过滤器应用到HomeController的AGM方法上:

public class HomeController : Controller
{
    [RedirectToCanonicalUrl]
    public ActionResult AGM()
    {
        // 原有的业务逻辑保持不变
        return View();
    }
}

如果你的项目里还有其他类似需要重定向的Action,也可以把这个过滤器注册为全局过滤器,这样就不用逐个方法加特性了:
打开App_Start/FilterConfig.cs,添加:

filters.Add(new RedirectToCanonicalUrlAttribute());

方案2:直接在Action方法内添加重定向逻辑

如果你的场景很简单,不想额外创建过滤器,也可以直接在AGM方法里处理:

public ActionResult AGM()
{
    var request = Request;
    // 判断当前请求的路径是否是旧URL
    if (request.Url.AbsolutePath.Equals("/Home/AGM", System.StringComparison.OrdinalIgnoreCase))
    {
        // 301永久重定向到新URL
        return RedirectPermanent("/agm");
    }
    // 原有的业务逻辑
    return View();
}

重要提醒:路由顺序要正确

你已经配置了新的AGM路由,但一定要确保它在默认路由之前,否则请求会先匹配到默认路由,影响重定向效果:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // 新的AGM路由要放在默认路由前面
        routes.MapRoute(
            name: "AGM",
            url: "agm",
            defaults: new { controller = "Home", action = "AGM" }
        );

        // 默认路由
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

为什么用301重定向?因为这是永久重定向,搜索引擎会把旧URL的权重转移到新URL上,用户的旧书签也会逐步被搜索引擎更新,对SEO和用户体验都更友好。

内容的提问来源于stack exchange,提问作者Brendan Vogt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:09:08