【问题标题】:Combine Similar ASP.NET MVC Routes组合相似的 ASP.NET MVC 路由
【发布时间】:2013-02-25 10:43:35
【问题描述】:

我有两条非常相似的 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 }
);

就目前而言,它们看起来不是很干燥。

【问题讨论】:

  • 查看 stackoverflow.com/questions/3303801/… – Stefano Altieri 刚刚编辑
  • 感谢@StefanoAltieri - 考虑到问题的性质,我希望有一个更简单的解决方案。
  • 我更新了我的答案...看看它是否适合你

标签: c# asp.net-mvc


【解决方案1】:

如果您可以重命名控制器(删除 Log 后缀),您可以尝试使用 {controller} 关键字:

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

【讨论】:

  • serry.. 无法编译...给我一分钟
  • 那是在我原来的解决方案中,但要求这样命名 URL:/areax/logs/user/details/10 而不是:/areax/logs/userlogs/details/10(注意重复的“日志”)意味着这个答案不太正确。不过感谢您的建议。
  • @Bern 按照 Stefano 的建议,删除“日志”后缀,你应该没问题。
  • 感谢您的努力,但您建议我更改 URL 命名要求以适应建议的解决方案。如果现在有使用 MVC 路由技术来解决需求的方法,那么这就是我会接受的答案。即使我删除了引发其他问题的“Logs”后缀,即“UserLogsController”变成了“UserController”,这实际上并不正确。
猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 2016-04-26
  • 2011-07-02
  • 2016-04-04
  • 2011-01-07
  • 2015-08-04
  • 1970-01-01
  • 2014-09-15
相关资源
最近更新 更多