Как «любезное перенаправление» IIS влияет на ASP.NET MVC или другие веб-платформы?

Я прочитал в http://support.microsoft.com/kb/298408, что IIS6.0 автоматически отвечает любезным перенаправлением (HTTP 301) на URL-адреса без точки.

Когда браузер запрашивает URL-адрес, например http://www.servername.de/SubDir, браузер перенаправляется на http://www.servername.de/SubDir/. В конце URL-адреса стоит завершающая косая черта.

Internet Information Server (IIS) сначала обрабатывает SubDir как файл, который он должен вернуть браузеру. Если этот файл не удается найти, IIS проверяет, существует ли каталог с таким именем. Если каталог с таким именем существует, браузеру возвращается любезное перенаправление с ответным сообщением 302 Объект перемещен. Это сообщение также содержит информацию о новом местоположении каталога с косой чертой в конце. В свою очередь, браузер запускает новый запрос GET к URL-адресу с завершающей косой чертой.

Как это поведение пересекается с фреймворком, подобным ASP.NET MVC, в котором используются URL-адреса, которые в целом не требуют или не используют точки?

В частности ... отключает ли ASP.NET MVC эту функцию IIS6.0 при установке? Если да, то как?

Я бы предположил, что это не, но вместо этого маршрутизация запроса, выполненная в IIS, отправляет запрос в ASPNET перед выполнением перенаправления. Если бы кто-нибудь мог объяснить, был бы признателен.


person Cheeso    schedule 25.03.2010    source источник
comment
См. Также haacked.com/ архив / 2008/11/26 /   -  person Robert Harvey    schedule 25.03.2010


Ответы (1)


Механизм маршрутизации в ASP.NET MVC позволяет использовать в приложении маршруты без расширений. Вы можете настроить IIS 6.0 для обработки таких URL-адресов, сделав сопоставление с подстановочными знаками, которое связывает фильтр aspnet_isapi со всеми запросами, что означает, что все проходит через механизм ASP.NET для обработки.

При установке на сервер с IIS 6.0 ASP.NET MVC не вносит никаких изменений в метабазу IIS, что означает, что маршруты без расширений не будут работать.

Я бы порекомендовал использовать маршрутизацию без расширений только в IIS 7 и выше и иметь некоторое расширение (например, .mvc) для IIS 6.0. Это позволяет избежать сопоставления подстановочных знаков и возможного снижения производительности из-за того, что движок ASP.NET обслуживает даже статические файлы, такие как изображения, css, javascript, ...

person Darin Dimitrov    schedule 25.03.2010
comment
Я знаю, что некоторые люди использовали .mvc, а затем применили перезапись URL-адресов для IIS6, например IIRF (iirf.codeplex.com), чтобы получить тот же визуальный эффект без перфорации статических файлов. - person Cheeso; 25.03.2010