我有点问题
我有一个运行良好的MVC网站。
我想拥有SEO友好的网址,所以我创建了这样的自定义路由
{section}/{group}/{manufacturer}
因为它具有与默认路径相同的字段数
{controller}/{action}/{id}
我在RouteConfig.cs中创建循环,转到数据库并循环Sections表并创建自定义路由,如
FOOD/{group}/{manufacturer}
SPORT/{group}/{manufacturer}
CARS/{group}/{manufacturer}
并将其指向Sections控制器。
它运作得很好。我遇到的问题是,现在我需要将FOOD重命名为FRESH-FOOD,我希望保持与FOOD工作的旧链接。
你会推荐什么?我该如何解决这个问题?
有没有更好的方法来做路线而不是自定义路线?
答案 0 :(得分:0)
听起来这可能是自定义路由处理程序的一个好例子。在下面的ProcessRequest
方法中,您可以检查控制器名称" FOOD"并重定向到" FRESH-FOOD"像这样:
public class CustomRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new CustomHttpHandler();
}
}
public class CustomHttpHandler : IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
var routeValues = context.Request.RequestContext.RouteData.Values;
var controllerName = context.Request.RequestContext.RouteData.GetRequiredString("controller");
if (controllerName.ToLower() == "food") controllerName = "FRESH-FOOD";
var controller = ControllerBuilder.Current.GetControllerFactory().
CreateController(context.Request.RequestContext, controllerName);
if (controller != null)
{
controller.Execute(context.Request.RequestContext);
}
}
}
创建自定义路由时,请使用Route
IRouteHandler
构造函数重载
答案 1 :(得分:0)
我找到了这个博客,并使用简单的NuGet包将旧路由重定向到新路径
https://github.com/Haacked/RouteMagic
和这篇博客文章
http://haacked.com/archive/2011/02/02/redirecting-routes-to-maintain-persistent-urls.aspx/
谢谢@jpishko的帮助:)