#asp.net #web-config #routes
#asp.net #web-config #маршруты
Вопрос:
У нас есть веб-сервер, на котором без проблем запущено несколько отдельных приложений на одном сайте. Я только что добавил новое приложение в корневой каталог. Многие из этих приложений используют таблицы маршрутизации в global.asax, как и тот, который я добавил в root. И я получил ошибку, которая, как оказалось, заключалась в том, что в web.config, в разделах <модули> и <обработчики>, мое новое корневое приложение добавило обработчик с тем же именем, что и у «вспомогательного» приложения. Но все эти приложения используют одно и то же имя для модулей и обработчиков: они слишком поддерживают таблицы маршрутизации, и все они называются «UrlRoutingModule» и «UrlRoutingHandler».
То есть, допустим, у нас есть существующие приложения foo и bar, запускаемые какhttp://example.com/foo и http://example.com/bar . И foo, и bar добавляют обработчик, называемый «UrlRoutingHandler». Похоже, это не вызывает никаких проблем. Теперь я добавляю новое приложение base, которое запускается как простоеhttp://example.com . (Нет вложенного пути.) Он также добавляет обработчик UrlRoutingHandler. И как только я добавлю это приложение, foo и bar больше не будут доступны. Любая попытка связаться с ними выдает ошибку 500.
Может ли кто-нибудь дать мне некоторые подсказки относительно того, что происходит? Добавляется ли web.config приложения на маршруте к web.config «вспомогательного» приложения, но web.config в «одноранговых» приложениях не влияют друг на друга?
Я переименовал обработчик в базовом приложении, и, похоже, это работает. Но «это работает, и я не знаю почему» лишь немного лучше, чем «это не работает, и я не знаю почему».
Ответ №1:
Web.config всегда включает в себя все, что находится на их родительском уровне. Вы можете переопределить или удалить, но это всегда сумма всего, начиная с machine.config вплоть до самого вложенного web.config.