Asp.net-Mvc

如何將命名空間添加到自定義路由擴展

  • November 8, 2018

我使用 routes.add 而不是 routes.maproute (具有命名空間 arg),因為我擴展了 Route 類。我需要在路由上添加命名空間,因為我的一個區域在站點內具有相同的控制器名稱。我的問題是我不知道將命名空間放在哪裡..


public class CultureRoute : Route
{
    public CultureRoute(string url, object defaults, object constraints, RouteValueDictionary dataTokens)
           : base(url, new RouteValueDictionary(constraints), dataTokens, new MvcRouteHandler())
       {
       }
}

全球.asax


routes.Add("Default", new CultureRoute(
   "{controller}/{action}/{id}",
   new {controller = "Home", action = "Index", id = UrlParameter.Optional}));

var dataTokens = new RouteValueDictionary();
var ns = new string[] {"MyProject.Controllers"};
dataTokens["Namespaces"] = ns;

routes.Add("Default", new CultureRoute(
   "{controller}/{action}/{id}",
   new { controller = "Home", action = "Index", id = UrlParameter.Optional },
   null /*constraints*/,
   dataTokens
));

編輯:(以前創建了一個自定義路線,但這不是必需的)。這應該可以解決問題。至少在 MVC 4 和最有可能的 MVC 3 中是這樣

Route defRoute = new CultureRoute ("{controller}/{action}/{id}",
           new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
           new SomeRouteHandler());
if( defRoute.DataTokens == null )
     defRoute.DataTokens = new RouteValueDictionary();
defRoute.DataTokens.Add("Namespaces", new string[] { "MVCApp.WebUI.Controllers" });
       routes.Add(defRoute);

引用自:https://stackoverflow.com/questions/4103876