Неаутентифицированные пользователи не могут получить доступ к статическим файлам в ASP.NET MVC независимо от элементов местоположения - PullRequest
4 голосов
/ 11 ноября 2010

Я знаю, что этот вопрос задавался несколько раз на SO, но ни один из этих ответов не работал в моей ситуации.У меня есть приложение ASP.NET MVC2, которое использует проверку подлинности с помощью форм на моем локальном IIS 7.5 (7600.16385) на AppPool, работающем в интегрированном режиме.Интересно, что не происходит при использовании веб-сервера разработки, поставляемого с VS 2010. Мой файл web.config не содержит элементов <authorization /> и <location />.Когда я попадаю на домашнюю страницу, в окне входа в систему отображается все, кроме файлов .CSS и .PNG, хранящихся в каталоге ~/Content.Когда я напрямую запрашиваю файл .CSS с http://localhost/WebSubscribers/Content/Site.css,, я перенаправляюсь на страницу входа.Похоже, что подстановочный знак пытается авторизовать каждый запрос, даже когда я разрешаю этот запрос, используя <location path="Content" />, как показано ниже:

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

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

В IIS я не создал сопоставлений с подстановочными знаками и, просто чтобы убедиться, я удалил сайт и заново создал его, указывая на тот же каталог, только чтобы получить те же результаты.Можно ли указать сопоставление подстановочным знаком где-нибудь, кроме IIS?Может ли мой файл web.config "получить" какое-то подстановочное отображение?Я использую элементы управления Telerik MVC, которые, похоже, внесли некоторые изменения (зарегистрированные пространства имен, httpHandlers, модули) в файл web.config.

Любые другие предложения?

ОБНОВЛЕНИЕ: При использовании Chrome для посещения веб-сайта без проверки подлинности инструмент разработчика «Ресурсы» говорит следующее о моем файле Site.css: «Site.css: -1Resource интерпретируется как таблица стилей, но передается с типом MIME text / html».

Где будет установлен такой тип пантомимы?Узел сайта в IIS говорит ".css | text / css | Inherited".

Ответы [ 2 ]

10 голосов
/ 16 ноября 2010

Я нашел причину и решение моей проблемы в IIS. Веб-приложение работает в IIS из моего каталога проектов Visual Studio, поэтому я настроил его для использования AppPool, который запускается под моей учетной записью. В IIS функция Анонимная аутентификация была настроена как Определенный пользователь: IUSR . Я не знаю почему или как. Когда я изменил это значение на Удостоверение пула приложений , пользователи, не прошедшие проверку подлинности, могли получить доступ к статическим файлам.

+ 1 до Крейг Штунц за то, что он указывает, что сопоставления с подстановочными знаками, а также элементы местоположения не нужны для MVC и IIS 7.

2 голосов
/ 11 ноября 2010

Не следует использовать сопоставление с подстановочными знаками для IIS 7 в интегрированном режиме.Это нужно только для IIS 6 / «классический» режим.Вам также не нужен элемент location;это "просто работает".

...