2009-10-06 3 views
1

Я встретив неожиданное поведение:asp.net: RewritePath по умолчанию документ не работает, как предполагалось

Следующий оператор работает нормально:

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

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

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

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

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

Так что мой вопрос: каков правильный способ указания документа по умолчанию при переписывании URL-адреса?

ответ

4

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

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

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

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

+0

+1 для лучшей артикуляции проблемы, которую я испытываю. –

+0

Я отвечаю, что вы не можете использовать документы по умолчанию при перезаписи URL. Вы должны указать имя страницы. Существуют некоторые методы, которые могут позволить вам получить информацию о конфигурации из IIS о документе по умолчанию, но это не стоило бы усилий, потерпит неудачу в ограниченном доверии и не будет соответствовать одной версии IIS другой. Вы можете использовать response.redirect, который заставит браузер клиента запрашивать новый URL-адрес, и вы можете использовать для этого «~ /». В зависимости от того, что именно вы пытаетесь достичь путем перезаписи, это может быть лучшим решением в любом случае. –

Смежные вопросы