Разрешить анонимному пользователю просматривать папку Style and Images

Я пишу веб-приложение ASP.NET.

У меня есть экран входа в систему, на котором есть стили и изображения CSS. Я столкнулся с проблемой, когда не отображались стили и изображения. Я читал в Интернете, и там говорилось, что мне нужен файл web.config в папке «Содержимое». Я добавил в web.config следующее:

<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

Это, казалось, работало на моей локальной машине. Однако, когда я публикую в инетпабе на сервере, это не работает.

Вот моя структура папок:

Login/Login.aspx — мой экран входа в систему
Content — это моя корневая папка с содержимым
Content/Styles — здесь находится мой CSS
Content/Images — здесь хранятся мои изображения

Я попытался поместить тот же файл web.config в стили и изображения, но это тоже не сработало.

Любая помощь будет оценена по достоинству.

Обновлено:

Вот что у меня есть в моем основном файле web.config, связанном с доступом пользователей:

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

Обновлено 2: вот все, что находится в моем корневом файле web.config, кроме информации о строке подключения:

<system.web>
<httpRuntime requestValidationMode="2.0"/>
<compilation debug="true" targetFramework="4.0"/>
<sessionState cookieless="UseCookies"/>
<authentication mode="Forms">
  <forms name="CMS" loginUrl="Login/Login.aspx" timeout="25" slidingExpiration="true"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>
<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
  </providers>
</membership>
<profile>
  <providers>
    <clear/>
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
  </providers>
</profile>
<roleManager enabled="false">
  <providers>
    <clear/>
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/>
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
  </providers>
</roleManager>
</system.web>
<location path="Content" allowOverride="false">
<system.web>
   <authorization>
     <allow users="*" />
   </authorization>
 </system.web>
</location>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

Может быть здесь что-то мешает доступу пользователя?


person johnmurphy01    schedule 30.04.2012    source источник
comment
Получают ли они отказ, когда запрашивают определенный фрагмент контента или когда пытаются перечислить содержимое каталога?   -  person Rob Rodi    schedule 01.05.2012
comment
Да, если я попытаюсь перейти непосредственно к таблице стилей в браузере, я попаду на экран входа в систему с обратным URL-адресом.   -  person johnmurphy01    schedule 01.05.2012
comment
Любые другие идеи? Ни одно из решений не работает для меня. Примечательно, что все это работает на моей локальной машине. У меня возникают проблемы, когда я публикую на удаленном сервере. Есть ли какая-либо конфигурация в IIS, которую необходимо изменить, чтобы это работало правильно?   -  person johnmurphy01    schedule 02.05.2012


Ответы (4)


См. мой ответ здесь . Некоторые люди рекомендуют поместить файл web.config в папку, которую вы хотите сделать общедоступной, но я предпочитаю отслеживать все из корневого элемента web.config. По сути, вы вставляете тот же фрагмент, который у вас уже есть, но в файл web.config в корне вашего сайта. Не забывайте также об атрибуте «allowOverried=false». :)

Что-то еще, что может быть действительно сложно, — это правильно выбрать путь. Убедитесь, что вы все сделали точно правильно! :)

<location path="Path to your folder" allowOverride="false">
   <system.web>
      <authorization>
         <allow users="*"/>
      </authorization>
   </system.web>
</location>
person Daniel Szabo    schedule 01.05.2012
comment
Работал как шарм :) - person Mohsin; 26.12.2018

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

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

У нас есть режим Аутентификация Windows, включенный по умолчанию, но когда в web.config указано Аутентификация с помощью форм, он фактически включает их оба в Конфигурация ИИС.

С вашим web.config у вас есть что-то вроде этого

<system.web>
    <authentication mode="Forms">
        <forms name="CMS" loginUrl="Login/Login.aspx" timeout="25" slidingExpiration="true"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>
    <!-- ...etc... -->
</system.web>

Если на сервере, на который вы переместились, включена проверка подлинности Windows, в IIS это будет выглядеть так:

введите здесь описание изображения

Обратите внимание, что и Forms, и Windows включены, несмотря на то, что в вашей конфигурации указано только Forms. Что это сделает, так это подорвет ваши добавленные файлы web.config в подкаталогах.

Когда у вас есть нижеприведенное в папке «Содержимое», похоже, что он конфликтует с Windows vs Forms, и независимо от того, что вы помещаете, он, похоже, не соблюдает ваш файл web.config.

<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

Если вы находитесь в такой же ситуации, обязательно отключите аутентификацию Windows или любые другие неиспользуемые режимы аутентификации, как показано на изображении ниже. Вам также необходимо убедиться, что Anonymous включен, чтобы он был открыт для всех.

Надеюсь, это поможет кому-то.

введите здесь описание изображения

person Kirk    schedule 03.04.2014

По сути, вы хотите разрешить любому пользователю доступ к файлам в папке Content.

добавьте это в свой основной web.config:

<location path="Content">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>
person Shai Cohen    schedule 30.04.2012
comment
Я изменил свой основной web.config, чтобы он содержал этот фрагмент кода, и, похоже, он ничего не сделал. - person johnmurphy01; 01.05.2012
comment
Странный. Я знаю, что это работает, я сам использовал это много раз. Посмотрим, сможем ли мы разобраться в проблеме. Не могли бы вы отредактировать свой исходный вопрос с соответствующими частями вашего основного web.config? В частности, хотелось бы увидеть эти разделы: authentication и все location разделы. - person Shai Cohen; 01.05.2012
comment
Разрешить как *, так и ?, ‹разрешить пользователям=*,? /› - person Nick Bork; 02.05.2012
comment
Я считаю, что нужно только *. ? предназначен для неидентифицированных пользователей. У вас случайно не остались другие файлы конфигурации в стилях и изображениях? - person Shai Cohen; 02.05.2012
comment
Нет, я исключил их, чтобы реализовать предложения здесь. - person johnmurphy01; 02.05.2012
comment
Я в недоумении, почему это не работает. Давайте попробуем что-нибудь еще. Измените путь местоположения на Content/Styles и проверьте, проходят ли стили. - person Shai Cohen; 02.05.2012
comment
Когда я меняю путь местоположения на Content/Styles, изображения отображаются, но стиль отсутствует. - person johnmurphy01; 02.05.2012
comment
Кроме того, я получаю сообщение 302 для местоположения таблицы стилей на странице входа, если я использую Firebug. - person johnmurphy01; 02.05.2012
comment
Ответ Даниэля Сабо лучше, потому что в нем упоминается атрибут allowOverride. - person CSharper; 20.10.2019

Путем документирования того, что помогло в моем случае: Это обсуждение было полезным

  • У меня было другое приложение, где у меня не было проблем, и единственная разница заключалась в том, что у IUSR были разрешения в папках. Добавление разрешений IUSR помогло
  • Использование «проверки» в браузере для отображения консоли позволяет понять, когда файлы недоступны (в противном случае локальное кэширование скрывает результаты).
  • Я пытался использовать web.configs на разных уровнях, как описано выше, но эти решения мне не помогли.
person Walter de Jong    schedule 22.05.2017