Как проверить значение режима аутентификации в Web.Config без ссылки на System.Web

#c# #.net #asp.net

#c# #.net #asp.net

Вопрос:

У меня есть класс, которому необходимо проверить режим аутентификации из web.config.

Пример:

 <authentication mode="Forms" />
  

или

 <authentication mode="Windows" />
  

Теперь я знаю, что это можно довольно легко сделать с помощью следующего кода:

 AuthenticationSection sec = ConfigurationManager.GetSection("system.web/authentication");
if (sec.Mode == "Windows")
{ ... }
  

Моя проблема в том, что на этот класс / проект ссылаются в моем веб-проекте, а также в проекте WinForms. Для проекта WinForms требуется платформа клиентского профиля .NET 4.0 (мы не хотим требовать полную платформу .NET 4, если это возможно). Если я не ошибаюсь, профиль клиента не содержит System.Web.dll .

Есть ли способ проверить это значение без ссылки на System.Веб (и желательно без ручного разбора файла конфигурации)?

Я пытался:

 object authSection = ConfigurationManager.GetSection("system.web/authentication");
if (authSection.ToString() == "Windows")
{ ... }
  

Однако toString() просто возвращает строку «System.Web.Configuration.Раздел аутентификации».

Спасибо!

Комментарии:

1. Можете ли вы выполнить GetType () для идентификатора? Это должно быть FormsIdentity для FormsAuthentication. Просто мысль….

Ответ №1:

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

 AuthenticationSection authSection = (AuthenticationSection)ConfigurationManager.GetSection("system.web/authentication"); 
if (authSection.Mode.ToString() == "Windows")  
  

Ответ №2:

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

 ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel)  

Или вы могли бы использовать один из других подобных методов в элементах ConfigurationManager. На данный момент я не могу протестировать это для вас, но я почти уверен, что они должны работать. Поскольку, по сути, им все равно, что это за файл conf, главное, чтобы он существовал, поскольку унаследованный тип web.config — это config, вы должны иметь возможность получить к нему доступ, как и к любому другому, и запросить конкретное поле, которое вам нужно.

ConfigurationManager

Ответ №3:

Где в вашем коде вам нужно принять решение по этому поводу? Если пользователь аутентифицирован в этот момент, вы могли бы использовать IIdentity.Введите AuthenticationType и обработайте соответствующим образом. Для Forms это всегда будет возвращать Forms, для удостоверения Windows это обычно NTLM, хотя это может быть Negotiate или Kerberos.