#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.