简体   繁体   中英

301 Redirection Layer in Microsoft asp.net MVC using phil haacked code doesn't work for me

I need a set up a website that accepts URLs from an older web site version and permenantly redirect them to the new site.

I tried this code from Phil Haack's blog but it seems to redirect everything and severely screw up all route generations.

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

Has anyone got something like this working?

The important paramenters for defining a redirect for me is targetUrl and destinationUrl

eg

routes.RedirectPermanently("about/history","about/heritage");

Would permanently redirect visits to /about/history to /about/heritage.

Haacks APi is perfect, but it just doesn't work. The Route object he uses seems to always be accepted for any routeValues.

You could always use a catchall at the end of your routes which points to a method that does a redirect, like 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();
  }
}

Here's a (preferred) alternative where you can specify which status code.

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();
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM