2017-06-17 188 views
0

我有点问题ASP.NET MVC自定义路由与默认路由

我有一个MVC网站工作得很好。

我想有SEO友好的URL,所以我创建的自定义路由,看起来像这样

{section}/{group}/{manufacturer} 

,因为它具有相同数量

{controller}/{action}/{id} 

我在循环中创建的默认路由领域在RouteConfig.cs中进入数据库并循环Sections表并创建自定义路由,如

FOOD/{group}/{manufacturer} 
SPORT/{group}/{manufacturer} 
CARS/{group}/{manufacturer} 

并将其指向Sections控制器。

它工作得很好。我遇到的问题是,现在我需要将FOOD重命名为FRESH-FOOD,并且我想保留旧的链接到FOOD工作。

你会推荐什么?我该如何解决这个问题?

有没有更好的方法来做路线部分,而不是自定义路线?

回答

0

这样的声音可能是自定义路由处理程序的一个好例子。在ProcessRequest方法下面你可以检查“食物”的控制器名称并重定向到“新鲜食品”是这样的:

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