asp.net: RewritePath для документа по умолчанию не работает, как предполагается - PullRequest
1 голос
/ 07 октября 2009

Я столкнулся с неожиданным поведением:

Следующее утверждение отлично работает:

Context.RewritePath( "~/Default.aspx" );  // redirect to default doc, explicitly

Это дает мне ошибку 404:

Context.RewritePath( "~/" );  // redirect to default doc, implicitly

Загрузка документа / из браузера без корректной перезаписи URL загружает документ, поэтому я считаю, что IIS настроен правильно, и что / и /Default.aspx действительно ссылаются на один и тот же документ.

Я бы предпочел использовать последнее утверждение, поскольку существует вероятность того, что имя документа по умолчанию будет изменено в IIS с течением времени. Я предполагаю, что решение включает в себя некоторый метод для получения имени документа по умолчанию из IIS, однако я не смог найти такой метод.

Итак, мой вопрос: как правильно указать документ по умолчанию при перезаписи URL?

1 Ответ

4 голосов
/ 07 октября 2009

Ваша проблема в том, что IIS обрабатывает переводы пути для «документа по умолчанию», прежде чем он передает управление asp.net.

Когда браузер запрашивает URL-адрес без имени файла, IIS проверит список «документов по умолчанию», настроенных для этого сайта. Затем он ищет физические файлы в запрошенном пути, которые соответствуют имени настроенных документов по умолчанию. Затем он возвращает первый соответствующий документ по умолчанию, который физически существует на диске.

После этого, если запрошенный файл является файлом asp.net, он вызывает среду выполнения asp.net и передает обработку asp.net.

Перезапись вашего URL происходит внутри процесса asp.net. Он не осведомлен о настройках IIS в отношении документов по умолчанию и тому подобного. Когда вы используете методику, такую ​​как перезапись URL, которая происходит полностью в asp.net, вы не можете использовать документы по умолчанию и тому подобное. Поэтому всегда переписывайте, используя имя страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...