【问题标题】:C# MVC continue with routes after route failureC# MVC 在路由失败后继续路由
【发布时间】:2011-12-13 17:19:29
【问题描述】:

在路由找不到控制器后,是否可以让mvc框架继续下一个匹配的路由?

我在数据库中有视图,但我希望在它在数据库中查找匹配视图之前拥有匹配实际控制器的路由。

我有这些路线自动取款机。

        routes.MapRoute(
            "Default",
            "{controller}/{action}"
        );

        routes.MapRoute(
            "Content",
            "{*route}",
            new { controller = "Home", action = "Index" }
        );

如果“默认”路由无法找到控制器/动作,它是否可以继续到下一个路由“内容”?

干杯,

瑞克。

【问题讨论】:

  • 你的测试显示了什么?

标签: c# model-view-controller routes


【解决方案1】:

MVC 路由通过将 URL 与路由值匹配来工作,因此只要模式匹配,那么无论是否存在与 URL 匹配的实际控制器/动作对,它都会尝试使用该路由。为了做到这一点,您可以在 OnActionExecute 中放置一些评估控制器操作名称的内容,如果它与数据库不匹配,则在默认路由上执行忽略路由。我会添加一个不同的路由,它是您想要匹配的模式并使用它而不是默认路由,并将您的默认路由放在列表的底部,这样它就可以按预期成为您的包罗万象。

【讨论】:

  • 我今天早上做了更多的事情,如果我有 url /test/test 并且没有名为 test 的控制器和动作测试,那么路由不会掉到下一个将检查数据库的行。有没有办法修改路由以允许这样做?
  • 我在 MVC 源代码中进行了一些挖掘,试图找到一种方法来做我想做的事,但我认为将 {controller}/{action} 更改为固定控制器部分更容易,例如跟踪/{action},然后将数据库作为失败。
  • 是的。你打它的头。您可以通过使用 Global asax 之外的路线来实现这一点。基本上在您的数据库中有一个各种查找表,然后在您的 Action 方法中检查数据库中的视图,如果它不存在,则按名称调用路由。你也许可以在没有数据库检查的情况下用命名路线完成类似的事情,但我还没有早上喝咖啡,所以我还没有在所有气缸上开火:-)
猜你喜欢
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
相关资源
最近更新 更多