2013-02-25 46 views
1

我有两个非常类似的ASP.NET MVC路由,下面提供。组合类似的ASP.NET MVC路由

无论如何要结合这两条路线并放置条件语句,以便(1)对“logs/email /”的任何请求发送到EmailLogsController,并请求“logs/user /”发送到UserLogsController?

// URL: /areax/logs/email/ 
// URL: /areax/logs/email/details/51 
// URL: /areax/logs/email/details/117 
context.MapRouteLowercase(
    "AreaX.Log.Email", 
    "areax/logs/email/{action}/{id}", 
    new 
    { 
     controller = "EmailLogs", 
     action = "Index", 
     id = UrlParameter.Optional 
    }, 
    new[] { ControllerNamespaces.AreaX } 
); 

// URL: /areax/logs/user/ 
// URL: /areax/logs/user/details/1 
// URL: /areax/logs/user/details/10 
context.MapRouteLowercase(
    "AreaX.Log.User", 
    "areax/logs/user/{action}/{id}", 
    new 
    { 
     controller = "UserLogs", 
     action = "Index", 
     id = UrlParameter.Optional 
    }, 
    new[] { ControllerNamespaces.AreaX } 
); 

目前的情况是,他们不看很干。

+0

见stackoverflow.com/questions/3303801/... - 斯蒂法诺阿尔铁刚才编辑 – 2013-02-25 10:58:31

+0

谢谢@StefanoAltieri - 考虑到问题的本质,我希望能有一个更简单的解决方案。 – Bern 2013-02-25 11:13:54

+0

我更新了我的答案...看看它是否可以为你工作 – 2013-02-25 11:16:40

回答

2

如果你可以为你的控制器(删除日志后缀),您可以尝试使用{}控制器关键字:

context.MapRouteLowercase(
    "AreaX.Log.Email", 
    "areax/logs/{controller}/{action}/{id}", 
    new 
    { 
     action = "Index", 
     id = UrlParameter.Optional 
    }, 
    new[] { ControllerNamespaces.AreaX } 
); 
+0

serry ..不会编译... givi我一分钟 – 2013-02-25 10:54:57

+0

请参阅http://stackoverflow.com/questions/3303801/how-to-achieve- a-dynamic-controller-and-action-method-in-asp-net-mvc – 2013-02-25 10:58:13

+0

这是在我原来的解决方案中,但要求将URL命名为:/ areax/logs/user/details/10而不是这个:/ areax/logs/userlogs/details/10(注意重复的“日志”)意味着这个答案不太正确。 (还是)感谢你的建议。 – Bern 2013-02-25 11:22:20