开发者

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

开发者 https://www.devze.com 2022-12-09 18:36 出处:网络
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 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 generatio开发者_如何学Cns.

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

e.g.

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

精彩评论

暂无评论...
验证码 换一张
取 消