Asp.net mvc 如何将命名空间添加到自定义路由扩展

Asp.net mvc 如何将命名空间添加到自定义路由扩展,asp.net-mvc,model-view-controller,Asp.net Mvc,Model View Controller,Im使用routes.add代替routes.maproute(具有名称空间arg) 因为我延长了课程的时间。 我需要在路由上添加名称空间,因为我的一个区域具有相同的控制器名称 在网站内。 我的问题是我不知道把名称空间放在哪里 public class CultureRoute : Route { public CultureRoute(string url, object defaults, object constraints, RouteValueDictionary data

Im使用routes.add代替routes.maproute(具有名称空间arg) 因为我延长了课程的时间。 我需要在路由上添加名称空间,因为我的一个区域具有相同的控制器名称 在网站内。 我的问题是我不知道把名称空间放在哪里


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


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

对于那些正在寻找解决方案的人:

首先需要一个接受DataTokens参数的构造函数,并将其传递给Route构造函数

例如,我使用的是一个在线获取的DomainRoute类,它没有传递到域所需的额外参数。因此,我只是实现了一个类似于基本路线的构造函数:

接下来,如果您重写了您的方法,必须在RoutedData返回值中返回DataToken。为了解决这个问题,我必须查看Route.cs源代码(谢谢JAVA2S)

现在只需按照Fleents post将您的名称空间放在dataTokens[“名称空间”]中

问候,, Daryl

编辑:(以前创建了自定义路线,但这不是必需的)。这应该能奏效。至少在MVC4和MVC3中是这样

Route defRoute=new CultureRoute(“{controller}/{action}/{id}”,
新建RouteValueDictionary(新建{controller=“Home”,action=“Index”,id=UrlParameter.Optional}),
新的SomeRouteHandler());
if(defRoute.DataTokens==null)
defRoute.DataTokens=新的RouteValueDictionary();
添加(“名称空间”,新字符串[]{“MVCApp.WebUI.Controllers”});
路线。添加(取消路线);

很久以前。。。我想你在用Maarten B的课,对吗?如上图所示添加名称空间对我来说不起作用。那就是将它们作为RouteValueDictionary添加到RouteValueDictionary中。我现在正在扩展它,有一个子域到区域的路由。肯定是很久以前。。。以至于我甚至不知道最初的问题是什么或者我正在解决什么

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
));
public DomainRoute(string domain, string url, object defaults, object constraints, object dataTokens)
              : base(url, new RouteValueDictionary(defaults), new RouteValueDictionary(constraints),new RouteValueDictionary(dataTokens),new MvcRouteHandler())
{
              Domain = domain;
}
RouteData data = new RouteData(...);
RouteValueDictionary dataTokens = DataTokens;
if (this.DataTokens != null) {
   RouteValueDictionary rdDataTokens = rd.DataTokens;
   foreach (var token in dataTokens)
      rdDataTokens.Add (token.Key, token.Value);
   }
}
return data;