Получить текущего вошедшего в систему пользователя в действии контроллера в MVC 3

Я работаю над приложением интрасети MVC 3 (проверка подлинности Windows). Я хочу, чтобы имя пользователя текущего вошедшего в систему пользователя было в моем действии контроллера. Я пробовал много вариантов, но не могу получить имя пользователя. Я пытался использовать Environment.Username, он хорошо работал в режиме отладки, но при развертывании предоставлял имя пула, а не имя пользователя.

Действие контроллера.

  public ActionResult Index()
        {
            LoggedUser usr = new LoggedUser();
            var aa = usr.User;
        }

Авторизованный пользователь

public class LoggedUser : Controller
    {
        public LoggedUser()
        {

        }
    }

Я следил за этим сообщением, но не смог заставить его работать application">Получение имени пользователя, вошедшего в систему, в приложении интрасети ASP.NET MVC3

Любая помощь??


person ankur    schedule 25.02.2013    source источник


Ответы (3)


Чтобы получить текущее имя пользователя, вы можете использовать свойство User.Identity.Name внутри своего действия:

public ActionResult Index()
{
    string usr = User.Identity.Name;
    ...
}

Код, который вы показали в своем вопросе, неверен. Вы определили LoggedUser и создаете экземпляр этого контроллера внутри некоторого действия Index. Вы не должны создавать экземпляры контроллеров вручную. Это ответственность фреймворка.

person Darin Dimitrov    schedule 25.02.2013
comment
Это означает, что у вас нет аутентифицированного пользователя. Вы правильно настроили аутентификацию Windows? Вы включили его на своем веб-сервере? Вы работаете внутри домена? У вас есть действительный пользователь домена? - person Darin Dimitrov; 25.02.2013
comment
это просто конструктор по умолчанию, я только что создал класс, чтобы получить пользовательское свойство базового класса. - person ankur; 25.02.2013
comment
Но вы не можете получить текущего пользователя внутри конструктора контроллера, потому что он еще не инициализирован. Вы должны получить доступ к свойству User.Identity.Name внутри действия контроллера. - person Darin Dimitrov; 25.02.2013
comment
он работает локально, но при развертывании на рабочем сервере он не работает. Да, режим аутентификации Windows настроен в моей веб-конфигурации, я развертываю его на IIS 6.0, есть ли в этом какая-то проблема, поскольку все остальные вещи MVC 3 работают нормально. Да, я работаю внутри домена, и это действительный пользователь домена.... - person ankur; 25.02.2013
comment
Создайте новое приложение ASP.NET MVC 3 в Visual Studio, используя файл Intranet Template. Откроется текстовый файл, содержащий подробные инструкции по настройке проверки подлинности Windows. Прочтите это. - person Darin Dimitrov; 25.02.2013
comment
давайте продолжим это обсуждение в чате - person ankur; 25.02.2013

если вы хотите использовать переменную уровня контроллера, для которой требуется имя пользователя, вы можете переопределить событие OnActionExecuting, где вы можете получить доступ к идентификатору пользователя, прошедшего проверку подлинности. Возможно, вам придется проверить значение null для user.identity, чтобы быть осторожным.

    Obj myObj;
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        myObj = new Obj(User.Identity.Name);
        base.OnActionExecuting(filterContext);
    }
person civilator    schedule 02.04.2017

вся дискуссия о том, что на самом деле делается, звучит как «состояние» разрешений при доступе к методам/функциям, действительно звучит как более крупная концепция, которая может жить в контроллере, подобном объекту, создавая класс такого типа «концепция состояния» ... все обсуждения о том, живут ли они в модели/представлении/контроллере, могут быть разрешены с помощью идентификатора/объекта в обмене параметрами, но поскольку это потребность в данных доступа, это не работа для контроллера, это работа для СУБД и структурирование доступа к данным для памяти, структуры модели данных, задания для класса в любой форме/модели/структуре класса, моделирующего «идею/связь/задачу». Все дискуссии о модели/контроллере касаются эффективности, а эффективность — это СУБД в любом случае.

person Patricio Munday    schedule 23.09.2016