.NET路由匹配所有模式(通配符)和异常

时间:2009-10-13 13:26:52

标签: .net-3.5 routing

如果说我的路由定义如下:"{books}/{*all}",那么定义了根文件夹的任何URL都会匹配它(即http://mysite.com/greekbooks/somethingirrelavant.htm)。

但是,如果我想更进一步,并希望为1982年发布的greekbooks(即网址http://mysite.com/greekbooks/1982/anythinghere)提供自定义处理程序,该怎么办?我真的不喜欢将这个逻辑放入我的第一个路由处理程序,但是当匹配此URL时,提供第二个处理服务页面。

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

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

2 个答案:

答案 0 :(得分:0)

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

{book}/{year}/{*all} 
首先抓住。我会更进一步,建议你为{book} / {year} / {* all}路由添加一个约束,使它只是数字。

答案 1 :(得分:0)

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

以下是如何处理路线的规则......

  
      
  1. 您定义的路线模式或默认路线   包含的模式(如果有的话)   在您的项目类型中。
  2.   
  3. 将它们添加到Routes集合的顺序。
  4.   
  5. 您为路线提供的所有默认值。
  6.   
  7. 您为路线提供的任何限制。
  8.   
  9. 您是否已定义路由以处理与a匹配的请求   物理文件。
  10.         

    ASP.NET Routing