Проблема с web.config
В виртуальном каталоге имеется папка, в ней есть файл web.config, в котором имются следующие папки:
<authentication mode="Forms">
<forms loginUrl="http://bla.bla.ru/Auth/login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
При попытке зайти на любой файл в этой папке выводится следующая ошибка:
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
Чё-то ничего не пойму.
Вот что по этому поводу в MSDN написано:
allowDefintion="Everywhere" - The ConfigurationSection can be defined anywhere.
allowDefintion="Machineonly" - The ConfigurationSection can be defined only in the Machine.config file
allowDefintion="MachineToApplication" - The ConfigurationSection can be defined in either the Machine.config file, the machine-level Web.config file found in the same directory as Machine.config, or the top-level application Web.config file found in the virtual-directory root, but not in subdirectories of a virtual root.
allowDefinition="MachineToWebRoot" - The ConfigurationSection can be defined in either the Machine.config file or the machine-level Web.config file found in the same directory as Machine.config, but not in application Web.config files.
Глюк заключается в расположении конфига Web.config. Если allowDefinition="MachineToApplication", то секция <configuration> должна находится в файле Machine.config или Web.config, который должен находится в одной папке с Web.config. Файлы конфигурации должны находится в корне виртуального каталога, но не в поддиректориях.
Вот что по этому поводу в MSDN написано:
allowDefintion="Everywhere" - The ConfigurationSection can be defined anywhere.
allowDefintion="Machineonly" - The ConfigurationSection can be defined only in the Machine.config file
allowDefintion="MachineToApplication" - The ConfigurationSection can be defined in either the Machine.config file, the machine-level Web.config file found in the same directory as Machine.config, or the top-level application Web.config file found in the virtual-directory root, but not in subdirectories of a virtual root.
allowDefinition="MachineToWebRoot" - The ConfigurationSection can be defined in either the Machine.config file or the machine-level Web.config file found in the same directory as Machine.config, but not in application Web.config files.
Т.е. мне надо поставить allowDefintion="Everywhere", чтобы размещать web.config в любой папке узла?
Попробуй
Чё-то ищу ищу, но могу найти такие строки в machine.config. Куда добавить это allowDefinition="Everywhere"???
....
</configuration>
Чё-то ищу ищу, но могу найти такие строки в machine.config. Куда добавить это allowDefinition="Everywhere"???
Спасибо, всё получилось! Сделал в свойствах этой папки "Создать приложение". Сейчас другая проблема. Имеется web.config в корневой папке, в котором имеются следующие строки:
<authentication mode="Forms">
<forms loginUrl=http://bla.ru/Auth/login.aspx ></forms>
</authentication>
<authorization>
</authorization>
Также в одном из подкатолов имеется свой web.config, в нём написано:
<authentication mode="Forms">
<forms loginUrl=http://bla.ruAuth/login.aspx ></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
Необходимо сделать так, чтобы на сайт могли заходить все пользователи, а именно, на эту папку - только авторизованные. При таких выше приведённых записях в конфигах происходит следующее.
На сайт действительно могут заходить все пользователи, но вот только ВСЕГДА при обращении к этой выше упомянутой папке требует авторизацию. Почему так?
<configuration allowDefinition="Everywhere">
....
</configuration>
А вот о таком он говорит, что не знает. Может в ASP.NET 2.0 нет такого
<forms loginUrl=http://bla.ruAuth/login.aspx ></forms>
на
<forms loginUrl=login.aspx ></forms>
И скопировал туда соотвествующий файл. Авторизация в этой папке происходит отлично. Но не происходит авторизация на всём сайте. В принципе решение есть. Т.е. после авторизации в подкатологе делать редирект на страницу авторизации ко всему сайту, автоматически заполнить форму. Но как-то коряво, может чё-нибудь другое предложите?
login.aspx для авторизации всего сайта должен валяться на уровень выше или в этом же каталоге, где и другие *.aspx файлы. Кароч, закинь login.aspx в корень виртуального каталога
Уже закидывал. Авторизация проходит для всего сайта, но не для этой папки. Когда обращаюсь к ней, происходит редирект на login.aspx который находится в корне, затем раз он не авторизовывает эту папку, то он опять редиректит на login.aspx.
Блин, а если программно поуправлять авторизацией, через объект Session и кукисы?
Ну вот пока что и сделал. Т.е. на всех страницах этой папки такая конструкция:
if (Context.User.Identity.Name.Length==0)
Response.Redirect("bla.aspx")