2011-07-14 104 views
5

我有这样一个URL方案:MVC控制器冒泡回路由器?

website.com/keywords 

我也有特定的控制器:

website.com/controller/action 

有时关键字可能看起来极像是控制器的网址,或有某种“/ url/thingy“。所有关键字网址将被存储在数据库中并返回静态内容。我希望能够做到的事情是让“关键字”控制器首先匹配(它只是使用{*}),并且如果在数据库中找不到URL,请回到路由器,然后让匹配继续。

我已经有了一种解决方法,它将通用匹配路由器放在最后,并将302重定向到适当的控制器,但这是一个较长的往返时间,如果我可以弹出退出。

+3

您可以为路线添加自定义约束,该约束可以与列表匹配。你甚至可以对约束中的数据库进行查找 - 但是由于所有内容都将通过路由引擎传递,我不确定从可伸缩性的角度来看这是否明智,除非您有效地缓存查找。无论如何,这可能会在SO上得到更好的答案。 – FinnNk

回答

2

不是说我不想在这件事上做腿部的工作,因为我很想得到答案,但我确实有这个书签的主题。 custom route constraint

如果你走了大约一半的路,你可以看到如何创建你的自定义路线限制;只需搜索清单2 - NotEqualConstraint.cs然后您可以传入这些关键字的缓存列表,或者只是将自定义路由约束保存到关键字列表本身。

+1

我们最终把所有内容都放在了最底层,因为我们意识到只需要每个访问者打一个页面,因为之后我们将使用正确的路线。仍然有答案。 –