MVC3 User.Identity.Name имеет значение null, Enironment.UserName не

Что ж, это интересная проблема. У меня есть приложение интрасети ASP.NET MVC3, работающее на сервере разработки Visual Studio, без NTLM. У меня нет домена AD на машине, на которой я тестирую.

Когда я пытаюсь использовать пользователя User.Identity.Name, возникает исключение нулевой ссылки, однако, когда я использую Environment.UserDomain и Environment.UserName, они заполняются правильными значениями.

Я серьезно запутался по этому поводу. Должен ли я избегать использования User.Identity.Name или есть причина, по которой это значение равно нулю?

ОБНОВЛЕНИЕ

Я только что заметил, что когда я использую System.Web.HttpContext.Current.User.Identity.Name, это работает, но просто использование User.Identity.Name не работает. Я пропустил оператор использования?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

person Kev    schedule 08.02.2012    source источник
comment
В каком коде вы это запускаете? Каков весь контекст? (метод, нить...)   -  person Andrew Barber    schedule 09.02.2012
comment
Я запускаю этот код непосредственно внутри класса контроллера, в конструкторе   -  person Kev    schedule 09.02.2012
comment
Спасибо за обновления. У меня была такая же проблема, и System.Web.HttpContext.Current.User.Identity.Name решила ее. Спасибо!   -  person Denis M. Kitchen    schedule 19.09.2013


Ответы (1)


Environment.UserName просто сообщает пользователю, который в данный момент запускает вашу программу, в вашем случае это пользователь, который запускает сервер разработки, я думаю, ему не нужно ничего делать с asp.net.

User.Identity.Name совершенно другое... оно сообщает вам имя вошедшего в систему человека в текущем контексте. И, кстати, вам не обязательно иметь NTLM, чтобы использовать его... вы можете настроить SqlMembershipProvider или настраиваемый поставщик членства и использовать проверку подлинности с помощью форм, и он будет нормально работать без AD.

person m0s    schedule 08.02.2012
comment
Итак, я собираюсь запустить это веб-приложение в корпоративной интрасети, которое при развертывании будет иметь Active Directory. Как я могу использовать User.Identity.Name во время разработки на моей машине, которая не находится в домене AD? - person Kev; 09.02.2012
comment
@Kev Это я хотел бы знать сам, так как у меня такая же проблема с проверкой аутентификации Windows без AD. Насколько я знаю, нет возможности использовать проверку подлинности Windows с сервером разработки... вам нужен IIS и вам нужна AD. Почти уверен, что это сделало бы хороший отдельный вопрос о переполнении стека. - person m0s; 09.02.2012