CurrentPrincipal.Identity.Name пусто

Я пытаюсь использовать System.Threading.Thread.CurrentPrincipal.Identity.Name, чтобы получить логин того, кто использует приложение ASP.NET. Я не получаю никаких ошибок сборки, но возвращает пустое значение. Я использую IIS 6, и вот мои настройки аутентификации:

  • Анонимная аутентификация: отключена
  • Олицетворение ASP.NET: отключено
  • Базовая аутентификация: включена
  • Аутентификация Windows: включена

У меня в файле Web.config тоже нет настроек авторизации. Вот метод, который я использую, чтобы попытаться получить логин:

    public void SetUser()
    {
       string login = System.Threading.Thread.CurrentPrincipal.Identity.Name;
    }

У меня есть точка останова для проверки значения, и она говорит login = "".

Как я могу получить логин?

ИЗМЕНИТЬ

Вот мое изображение для аутентификации:введите здесь описание изображения


person user3062114    schedule 19.06.2014    source источник
comment
Можете ли вы уточнить, что происходит с точки зрения set/get/void? Вы называете его SetUser, но он извлекает значение и ничего с ним не делает. А что насчет машины, на которой это работает? Это обычный сервер Windows, или виртуальная машина, или в облаке и т. д.? Вы пытались запустить простую программу только с этим на своем компьютере? Я спрашиваю, потому что это работает для меня, поэтому я пытаюсь выяснить, что отличается для вас.   -  person radumanolescu    schedule 19.06.2014
comment
Текущий принципал можно установить. Возможно ли, что какая-то другая часть программы установила для него пустое значение? См. msdn.microsoft. com/ru-ru/library/   -  person radumanolescu    schedule 19.06.2014
comment
SetUser() получит значение для входа в систему. Я буду использовать логин для извлечения записей из базы данных, чтобы проверить, авторизованы ли они. У меня нет логики для этого, я просто пытаюсь сначала получить значение. Я запускаю это на обычной ОС Windows 7 локально.   -  person user3062114    schedule 19.06.2014
comment
Просто попросите вместо этого HttpContext.Current.User.Identity.Name.   -  person Wiktor Zychla    schedule 19.06.2014
comment
@WiktorZychla - это также возвращает пустое значение.   -  person user3062114    schedule 19.06.2014
comment
Вы почему-то не отключили анонимный доступ.   -  person Wiktor Zychla    schedule 19.06.2014
comment
@WiktorZychla Моя проверка подлинности IIS говорит, что да, я только что отредактировал свой вопрос, указав изображение моих настроек проверки подлинности IIS. Я тоже перезапускал IIS пару раз.   -  person user3062114    schedule 19.06.2014
comment
Если анонимная аутентификация отключена, я не знаю, как вы можете проверить, что делает метод, не входя в систему.   -  person Erik Philips    schedule 19.06.2014
comment
Вы настроили авторизацию для отклонения неаутентифицированных запросов?   -  person Wiktor Zychla    schedule 19.06.2014


Ответы (2)


Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());

Работал на меня. У меня была такая же проблема.

person Little Bobbie2    schedule 02.03.2017
comment
Заметил, что даже проект не ставится в IIS, этот метод не возвращает null. Итак... Я думаю, что использование этого метода технически удалит связь между проектом и входом в IIS. - person Near; 02.07.2019

Я смог это исправить. В свойствах моего проекта я использовал IIS Express, поэтому мое приложение не сталкивалось с моим реальным IIS. Я снял этот флажок, создал виртуальный каталог и отключил всю аутентификацию, кроме аутентификации Windows, и теперь она работает.

person user3062114    schedule 19.06.2014
comment
Я не согласен. Это не работало, и для кого-то другого это могло быть проблемой. - person user3062114; 21.06.2014
comment
@Amol, если это решило вашу проблему, вы можете пометить этот пост как принятый ответ, нажав на серую галочку под кнопками голосования. Это помогает сообществу сосредоточиться на нерешенных вопросах. - person RBT; 04.01.2018