ASP.NET ASP 2 - расставить приоритеты маршрутизации? - PullRequest
1 голос
/ 10 января 2011

Для проекта у меня есть динамические страницы, которые извлекаются из базы данных контента. Однако некоторые страницы требуют дополнительных вычислений. Итак, я подумал, что создам для них определенный контроллер / представление, и они будут попадать только тогда, когда они существуют, в противном случае мой динамический маршрут перехватит его и позволит контроллеру содержимого получить содержимое базы данных для указанного маршрута. Надеюсь, я все правильно объяснил, но вот код из моего Global.asax, который может объяснить это немного подробнее:

routes.MapRoute( // Default controller actions, when not found, fall back to next route?
                    "Default",                                              
                    "{controller}/{action}/{id}",                           
                    new { controller = "Home", action = "Index", id = "" }  
                );

routes.MapRoute( // Catch all other? (And try to find content for those)
                    "DefaultContentRoute",              
                    "{ContentCategory}/{Content}",                        
                    new { controller = "Content", action = "Index" },  
                );

Это, очевидно, не работает, так как я получаю сообщение об ошибке «Обнаружено несколько типов, соответствующих контроллеру с именем xxx», когда я добавляю контроллер для контента, который требует дополнительных вычислений. Но мне было интересно, есть ли другой способ добиться того, что я пытаюсь сделать здесь? (Приоритетность маршрутов) Я явно хочу, чтобы мой URL был полностью динамическим.

Заранее большое спасибо.

1 Ответ

1 голос
/ 10 января 2011

ASP.NET MVC будет сбит с толку, так как любой URL будет соответствовать обоим маршрутам.Попробуйте сделать один из более явных, например:

routes.MapRoute( // Catch all other? (And try to find content for those) 
                    "DefaultContentRoute",               
                    "Categories/{ContentCategory}/{Content}",                         
                    new { controller = "Content", action = "Index" },   
                ); 

routes.MapRoute( // Default controller actions, when not found, fall back to next route? 
                    "Default",                                               
                    "{controller}/{action}/{id}",                            
                    new { controller = "Home", action = "Index", id = "" }   
                ); 

. Это обеспечит прохождение любого контента по маршруту по умолчанию, за исключением контента, начинающегося с «Категории» в URL.Альтернативой может быть злоупотребление ограничениями маршрута и создание ограничения для вашего маршрута ContentController, который проверяет, существует ли указанное содержимое.

...