2017-06-17 156 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