2009-10-13 158 views
0

如果说我有一个定义为这样的路由:"{books}/{*all}",那么任何定义了根文件夹的URL都会匹配它(即http://mysite.com/greekbooks/somethingirrelavant.htm)。.NET路由匹配所有模式(通配符),但有例外

但是如果我想更进一步,并希望为1982年出版的希腊书籍(即url http://mysite.com/greekbooks/1982/anythinghere)提供自定义处理程序。我真的不像把这个逻辑放到我的第一个路由处理程序中,但是当这个URL匹配时,提出第二个处理服务页面。

问题是"{books}/{*all}"也会吃"{books}/1982/{*all}"也。

基本上,如何处理'*' (all)匹配时如何定义多个路由处理程序?它有可能吗?

回答

0

您可以通过控制定义路由的顺序来执行此操作,因为按路由添加到路由集合的顺序评估URL。

下面是路由是如何处理的规则...

  1. 如果有的话,你已经定义或默认路由 模式,路线模式,即在你的项目类型包括 。
  2. 您将它们添加到Routes集合中的顺序。
  3. 您为路线提供的任何默认值。
  4. 您为路线提供的任何约束条件。
  5. 是否已定义路由来处理匹配 物理文件的请求。

ASP.NET Routing

0

是的,这是可能的。你会把你的额外

{book}/{year}/{*all} 

赶先。我会更进一步,并建议您为{book}/{year}/{* all}路由添加一个约束,以便它仅为数字。