Я делаю быстрый тест песочницы с некоторыми переписанными URL-адресами (пример взят из блога Скотта Гатри) и аутентификацией/авторизацией форм.
У меня очень простая установка.
~/View/(\d{1,6}) => ~/Public/View.aspx?ContentID=$1
И
~/Buy/(\d{1,6}) => ~/Private/Purchase.aspx?ContentID=$1
Я подтвердил, что переписывание URL-адресов работает, просматривая каждый из следующих разделов
- http://localhost/urltest/Public/View.aspx?contentID=123456
- http://localhost/urltest/View/123456
- http://localhost/urltest/Private/Purchase.aspx?contentID=123456
- http://localhost/urltest/Buy/123456
Затем я пошел и включил аутентификацию/авторизацию с помощью форм для этих двух каталогов в Web.Config. Настройте следующим образом
<location path="Private">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
<location path="Public">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
Это отлично работает, когда я просматриваю 2 исходных URL-адреса (.aspx), но вообще не срабатывает, когда я просматриваю переписанные версии URL.
Я попытался добавить разделы <location>
для Buy
отдельно, но это все еще не приводит к срабатыванию модуля авторизации/аутентификации.
Предположительно, это связано с тем, что он не рассматривает эти URL-адреса как ресурсы ASPX... Я могу обойти это, заставив правило перезаписи искать
<LookFor>~/Buy/(\d{1,6})\.aspx</LookFor>
то есть заставить переписанную версию иметь ASPX в конце, но это просто кажется уродливым. Есть ли способ заставить обработчики аутентификации запускать любой тип URL-адреса независимо от расширения (или его отсутствия)