代码之家  ›  专栏  ›  技术社区  ›  CVertex

301 Microsoft ASP.NET MVC中使用Phil Haacked代码的重定向层对我不起作用

  •  0
  • CVertex  · 技术社区  · 15 年前

    我需要一个建立一个接受旧网站版本的URL并永久重定向到新网站的网站。

    我在菲尔·哈克的博客上尝试了这段代码,但它似乎改变了所有的方向,严重地破坏了所有的路线。

    http://haacked.com/archive/2008/12/15/redirect-routes-and-other-fun-with-routing-and-lambdas.aspx

    有人有这样的工作吗?

    为我定义重定向的重要参数是targetURL和destinationURL

    例如

    Routes.RedirectPermanently(“关于/历史”,“关于/传统”);

    将访问永久重定向到/关于/历史记录到/关于/遗产。

    HaacksAPI是完美的,但它不起作用。他使用的路由对象似乎总是被任何路由值所接受。

    1 回复  |  直到 13 年前
        1
  •  2
  •   Dan Atkinson    13 年前

    您可以在路由的末尾使用catchall,该catchall指向执行重定向的方法,例如 this source :

    public class PermanentRedirectResult : ActionResult
    {
      public string Url;
    
      public override void ExecuteResult(ControllerContext context)
      {
        context.HttpContext.Response.StatusCode = 301;
        context.HttpContext.Response.RedirectLocation = this.Url;
        context.HttpContext.Response.End();
      }
    }
    

    这里有一个(首选)选项,您可以在其中指定状态代码。

    public class RedirectWithStatusCodeResult : ActionResult
    {
      public HttpStatusCode StatusCode { get; set; }
      public string Url { get; set; }
    
      public override void ExecuteResult(ControllerContext context)
      {
        context.HttpContext.Response.StatusCode = (int)this.StatusCode;
        context.HttpContext.Response.RedirectLocation = this.Url;
        context.HttpContext.Response.End();
      }
    }