AuthenticationSection.Mode возвращает Windows, когда для web.config задано значение Forms - PullRequest
2 голосов
/ 13 января 2011

Итак, мой файл Web.Config имеет:

<authentication mode="Forms">
      <forms loginUrl="~/Home/Index" timeout="2880" />
    </authentication>

в моем Application_Start () я делаю следующие вызовы

Configuration configuration = WebConfigurationManager.OpenWebConfiguration(null);            
        AuthenticationSection authentication = (AuthenticationSection)configuration.GetSection("system.web/authentication");
        AuthenticationType = authentication.Mode;

Проблема в том, что AuthenticationType становится Windows независимо от того, какое значение я установил в файле web.config. Мне нужно вытащить это значение, чтобы обработать страницу по-разному, в зависимости от того, как она настроена и не может получить правильные значения.

Ответы [ 3 ]

3 голосов
/ 13 января 2011

Я думаю, что передача нулевого параметра OpenWebConfiguration заставляет его открыть файл конфигурации машины.

Если вы читаете документы MSDN по этому вопросу.Вы заметите, что это говорит о том, что передача NULL даст вам root web.config.

Так что вы можете подумать, что это то, что вы хотите.Но это не так.Корневой файл web.config фактически находится в пути установки .NET .... обычно c: \ windows \ Microsoft.NET \ Framework [.NET VERSION] \ Config

Попробуйте указать путь к файлу конфигурации.Используйте этот оператор вместо пути, чтобы получить текущий путь к сайту

WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath)

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

2 голосов
/ 13 января 2011

Или просто используйте статический метод ConfigurationManager.GetSection, который откроет файл config.file для запущенного приложения, код которого выполняется.

var authentication = (AuthenticationSection)ConfigurationManager.GetSection("system.web/authentication");
AuthenticationType = authentication.Mode;

http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.getsection.aspx

Извлекает указанный раздел конфигурации для текущей конфигурации приложения по умолчанию.

0 голосов
/ 13 января 2011

Может быть, это неверный web.config. Вот что вы можете попробовать:

 Configuration webconfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
        System.Web.Configuration.SystemWebSectionGroup sysweb = (System.Web.Configuration.SystemWebSectionGroup)webconfig.GetSectionGroup("system.web");
        System.Web.Configuration.AuthenticationSection authSection = sysweb.Authentication;
        System.Web.Configuration.AuthenticationMode authmode = authSection.Mode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...