Если я регистрирую маршрут в области (скажем, он называется Admin) в файле global.asax
, а не в файле AdminAreaRegistration.cs
области, есть ли причина, по которой я не могу удалить файл AdminAreaRegistration.cs
? Есть ли какой-либо другой код в структуре, который может вызвать его на каком-то этапе, который может вызвать исключение, если он отсутствует?Могу ли я удалить xxxxxxxAreaRegistration.cs?
Как спросили в комментариях, вот код для регистрации Площадь в global.asax
routes.MapRoute(
"AdminAreaRoute",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "Payntbrush.Presentation.Demo.MVC3.Areas.Admin.Controllers" }
).DataTokens.Add("Area", "Admin");
routes.MapRoute(
"SiteAreaRoute",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "/|Home|Account" }, // Constraint's on the URL (second param above) {controller} segment
new string[] { "Payntbrush.Presentation.Demo.MVC3.Areas.Site.Controllers" }
).DataTokens.Add("Area", "Site");
Ключ заключается в использовании коллекции DataTokens, как подчеркивается в this excellent post Филипп Хейдона. Вы можете добавить столько, сколько хотите, но убедитесь, что вы поместили область корневого сайта после явных областей, так что {controller}/{action}/{id}
не улавливает все запросы до того, как будут доступны другие Маршрутные маршруты.
Я добавил код для достижения вышеуказанного. Это прекрасно работает, однако я пытаюсь выяснить, есть ли другой код в рамках MVC 3, который может попытаться вызвать класс xxxAreaRegistration на определенном этапе. Если я удалю его, тогда будет пустое исключение. – Chris
Крис, проблема здесь в том, что вы получите сообщение об ошибке, если попытаетесь получить доступ к этой области, не имея зарегистрированного для нее маршрута. Поэтому, пока вы зарегистрировали его, вы не должны получать никаких ошибок при доступе к этой области. Это единственный раз, когда .net понадобится или ищет регистрацию или зарегистрированный маршрут. – shenku
Я не могу проверить сейчас, но на 90% я удалил файл AreaRegistration в Районе и прочно полагался на маршрут AdminAreaRoute в global.asax, и запрос был правильно маршрутизирован. Я дважды проверю следующий шанс. – Chris