Аутентификация - Нет для одной папки (страницы), когда проект находится в FormsAuthentifications - PullRequest
3 голосов
/ 02 марта 2010

У меня есть веб-приложение на asp.net 2.0 с пространством имен Admin. У меня есть режим проверки подлинности формы для проекта.

    <authentication mode="Forms">
        <forms name="ASP_XML_Form" loginUrl="Login.aspx" protection="All" timeout="30"
               path="/" requireSSL="false" slidingExpiration="true"
               cookieless="AutoDetect">
        </forms>

    </authentication>

Теперь я пытаюсь открыть общий доступ к одной папке (одной внутренней странице) для неавторизованных пользователей:

<location path="Recovery">
    <system.web>
        <roleManager enabled="false" >
        </roleManager>

        <authentication mode="None">
        </authentication>

        <authorization>
            <allow users="*" />
        </authorization>

        <httpHandlers>
            <remove verb="GET" path="image.aspx" />
            <remove verb="GET" path="css.aspx" />
        </httpHandlers>
    </system.web>
</location>

Но когда я создаю страницу в общей папке, она не может получить доступ к сборке. И я вижу ошибку, как это:

Не удалось загрузить файл или сборку «Администратор» или одна из его зависимостей. Система не может найти файл указано.

Это также показывает мне ошибку:

Ошибка ASP.NET во время выполнения: это ошибка использовать раздел, зарегистрированный как allowDefinition = 'MachineToApplication' вне уровня приложения. Эта ошибка может быть вызвано виртуальным каталогом не настраивается как приложение в IIS.

Кто-нибудь знает, как совместно использовать (Authentification None) одну папку (страницу), когда проект находится в FormsAuthentifications?

Ответы [ 2 ]

4 голосов
/ 03 марта 2010

В элементе <location> должно быть просто следующее:

<location path="Recovery">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

(Если вам действительно нужно удалить их, вы также можете включить элемент handlers).

Ни элементы Authentication, ни элементы RoleManager недопустимы в web.config не уровня приложения, поэтому их нельзя определить в элементе <location>.

Редактировать в ответ на комментарий

Извините, чтобы уточнить: у вас слишком много в вашем элементе местоположения - элементы <authentication> и <roleManager> там не разрешены (если / Recovery не является приложением в IIS) и, скорее всего, вызовет вторую ошибку, о которой вы сообщаете в своем вопросе, ее необходимо будет удалить, прежде чем страница будет отображаться правильно.

Вы видите ошибку «не удается найти сборку» везде или только на странице в папке «Восстановление»? Эта папка помечена как «приложение» в IIS? Если это так, вам нужно скопировать двоичные файлы вашего сайта в папку / bin в папке / Recovery или удалить параметры приложения в папке в IIS.

Я только что понял, что сказал «элементы авторизации» в первых двух разделах, когда имел в виду «Элементы аутентификации» - извините, если это не так.

Изменить в ответ на второй комментарий

Обычно в IIS может быть один или несколько веб-сайтов - они являются корнями сайта и определяются как начальная точка приложения.

IIS также позволяет вам настраивать подпапки веб-сайта как приложение, что позволяет вам делать такие вещи, как:

  • Изменение параметров конфигурации, которые разрешено устанавливать только на уровне приложения
  • Запустить часть сайта в другом пространстве памяти
  • Запустить часть сайта под другой учетной записью пользователя

Однако, если вы делаете папку приложением, вам нужно убедиться, что весь код, который ей нужен, доступен, и когда вы запустили новое приложение, код в корневых / bin (или / app_code) папках эта папка больше недоступна.

Обычно в диспетчере IIS вы щелкаете по папке и удаляете приложение, чтобы оно наследовало от корня.

0 голосов
/ 02 марта 2010

проверьте пространство имен в коде за файлом - похоже, у вас может быть конфликт (вы создали файл в другой папке и затем физически переместили его в общую папку). также вы должны установить свойство location для общей папки, чтобы делиться ею для неаутентифицированных пользователей

...