Проблема маршрутизации URL с IIS7 - PullRequest
2 голосов
/ 28 марта 2011

URL-маршрутизация и IIS7 24.03.2011 16:24

Привет

У меня есть вопрос относительно маршрутизации URL в asp.net 4.0 и IIS7. Ниже я объяснил, какова структура моего сайта и как он настроен в IIS7.

Структура каталогов:

1.MyWebsite> Index.aspx

2.MyWebsite> О нас> Index.aspx

3. Мой сайт> ContactUs> ContactUs.aspx

II7 Конфигурация:

Я настроил документ по умолчанию для моего приложения как Index.aspx Теперь, когда я обращаюсь к URL-адресам ниже, IIS7 автоматически выполняет несколько маршрутов (обратите внимание, что до сих пор я не добавил ни одного маршрута в global.asax)

1.localhost / MyWebsite будет перенаправлен на localhost / MyWebsite / Index.aspx Хорошо!

2.localhost / MyWebsite / Aboutus будет перенаправлен на localhost / AboutUs / Index.aspx (это перенаправление выполняется, поскольку документ по умолчанию родительского уровня наследуется папкой AboutUs).

3.localhost / MyWebsite / ContactUs == Ошибка Http 403.14 Запрещено (эта ошибка вызывается IIS7, потому что он не находит Index.aspx в папке Conactus) Отлично !!

Хорошо, так что localhost / MyWebsite / ContactUs будет перенаправлен на localhost / MyWebsite / ContactUs / Index.aspx Я добавил ниже код в методе RegisterRoutes () в global.asax, надеясь, что это удовлетворит мое требование.

routes.MapPageRoute('ConactUs','ContactUs','~/ContactUs/ContactUs.aspx');

Так что теперь, когда я получаю доступ к localhost / MyWebsite / ContactUs, я по-прежнему получаю такую ​​же запрещенную ошибку. Так что настройки страницы IIS7 по умолчанию в корне не позволяют моим маршрутам работать?

Если у меня есть страница Index.aspx в каждой папке, то она работает, т.е. перенаправляется в /Contactus/Index.aspx ... но что, если у меня нет Index.aspx (моего документа по умолчанию) на каждой странице?

Спасибо и всего наилучшего, м.

Ответы [ 3 ]

1 голос
/ 09 апреля 2011

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

Структура каталогов:

1.MyWebsite> Index.aspx

2.MyWebsite> AboutUs> Index.aspx

3.MyWebsite> ContactUs> ContactUs.aspx

Все мои страницы имеют элемент управления UserControl с именем logo.ascx.У logo.ascx нет кода, прикрепленного к файлу.У него просто есть HTML с методом resol.clienturl ().И у logo.ascx просто есть атрибут ниже;<% @ Control Language = "C #"%>

Итак, чтобы все работало, я сделал несколько вещей,

  1. Для каждого каталога я выбрал отдельный Документ по умолчанию в соответствии с моимнеобходимость.поэтому при каждом просмотре каталога я автоматически перенаправляюсь на выбранную страницу по умолчанию.
  2. Я добавил маршрут в файлы global.asax для просмотра без каталогов.
  3. Я сделал RouteExistingFiles = true;
  4. Затем я убедился, что независимо от того, какой маршрут я добавил, я заменил все прямые ссылки на эту страницу на короткий URL.как я заменил localhost / MyWebsite / ContactUs / ContactUs.aspx на localhost / MyWebsite / ContactUs во всем проекте (как в меню, подменю и т. д.).
  5. Но при выполнении всего этого возникла странная проблема, я не смогчтобы увидеть мой логотип.Я был уверен, что я использовал resol.cienturl (), и он работал нормально на всех моих страницах без маршрутизации.Но только для страниц, для которых добавлен маршрут, изображение не было видно.Чтобы это работало, все, что мне нужно было сделать, это просто добавить код к файлу в моем logo.ascx , и магия сработала.

Спасибо, Нараен, спасибо Паули за вашу поддержку и предложения.

1 голос
/ 29 марта 2011

Причина, по которой он не работает, заключается в том, что обработчик IIS обнаруживает, что папка "ContactUs" существует и отвечает на запрос, а не передает его обработчику ASP.NET.(Например, если ваша фактическая физическая папка называлась «ContactUs1» вместо «ContactUs» и обновила ваш маршрут, указав «~ / contactus1 / contactus.aspx», вы увидите работу маршрутизации).

Простейшим решением в вашем случае может быть установка «ContactUs.aspx» в качестве документа по умолчанию только для подпапки «ContactUs».Это можно сделать, добавив файл web.config в папку ContactUs со следующим разделом XML ниже.

<configuration>
    <system.webServer>
        <defaultDocument>
            <files>
                <add value="ContactUs.aspx" />
            </files>
        </defaultDocument>
    </system.webServer>
</configuration>
0 голосов
/ 29 марта 2011

Вы смотрели на RouteExistingFiles свойство RouteCollection. Это позволит вам указать, следует ли использовать маршрутизацию для существующих файлов и папок или нет. Значение по умолчанию - false, что означает, что если между маршрутом и файлом или папкой уже есть конфликт, маршрут будет проигнорирован.

...