2009-10-13 156 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}路由添加一個約束,以便它僅爲數字。