[英]ASP.NET MVC custom routing with default route
我有点问题
我有一个运作良好的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链接正常工作。
你会推荐什么 ? 我该如何解决?
有没有更好的方法来做路由部分而不是自定义路由?
对于自定义路由处理程序而言,听起来像是个好例子。 在下面的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);
}
}
}
创建自定义路由时,请使用带有IRouteHandler
的Route
构造函数重载
我找到了这个博客,并使用简单的NuGet包将旧路由重定向到新路由
https://github.com/Haacked/RouteMagic
和这篇博客文章
http://haacked.com/archive/2011/02/02/redirecting-routes-to-maintain-persistent-urls.aspx/
谢谢@jpishko的帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.