Подтвердить что ты не робот

User.Identity.Name пустое в ASP.Net MVC

Точно в соответствии с заголовком.

Просто в моем HomeController у меня есть:

string Username = User.Identity.Name;

Почему это значение всегда пустое?

Есть ли что-то особенное, что я должен разместить в web.config, чтобы получить это значение. Я пробовал как на веб-сервере VS dev, так и на сервере IIS Windows Server 2003.

Это должно быть что-то простое, настройка сервера в IIS или что-то еще, поскольку код настолько прост и, кажется, является правильным способом ссылки на это значение.

спасибо много

4b9b3361

Ответ 1

Конечно, приятель. Вам необходимо пройти аутентификацию с сайта. Это имя используется для аутентификации.

Вы аутентифицируетесь, правильно?

Это не настройка и т.д.

Нажмите ссылку LOG IN, если вы используете стандартный шаблон ASP.NET MVC (если моя память служит мне правильной).

UPDATE (поскольку опубликованные добавили дополнительную информацию/комментарии)

Итак, что вам нужно - это проверка подлинности Windows. A быстрый поиск google придумал этот пост. Это довольно полезно (хотя и немного устарело, но все же актуально).. проверьте это.

Нашел лучший пост с кодом MVC для проверки подлинности Windows. Проверьте это.

Конфигурация, которая важна,...

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...

Ответ 2

Если вы хотите использовать проверку подлинности Windows, этого недостаточно, чтобы просто добавить

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...

Вы также хотите проверить инструкции файла readme для проекта MVC, особенно если ваш запуск в IIS Express и использование Visual Studio 2012.

См. ниже:

Хостинг на IIS Express:

  • Выберите проект в обозревателе решений, чтобы выбрать проект.

  • Если панель "Свойства" не открыта, откройте ее (F4).

  • На панели "Свойства" для вашего проекта:
    a) Установите "Анонимная аутентификация" на "Отключено".
    b) Установите "Аутентификация Windows" на "Включено".

Хостинг на IIS 7 или новее:

  • Откройте диспетчер IIS и перейдите на свой веб-сайт.

  • В представлении "Возможности" дважды щелкните "Аутентификация" .

  • На странице "Аутентификация" выберите проверку подлинности Windows. Если проверка подлинности Windows не является вариантом, вам необходимо убедиться На сервере установлена ​​проверка подлинности Windows.

    Чтобы включить проверку подлинности Windows в Windows:

a) На панели управления откройте "Программы и функции". b) Выберите "Включить или отключить функции Windows".

c) Перейдите в Internet Information Services > World Wide Web Services > Безопасность          и убедитесь, что проверена проверка подлинности Windows node.

Чтобы включить проверку подлинности Windows на Windows Server:

a) В диспетчере серверов выберите веб-сервер (IIS) и нажмите "Добавить службы ролей".

b) Перейдите на веб-сервеp > Безопасность          и убедитесь, что проверена проверка подлинности Windows node.

  1. На панели "Действия" нажмите "Включить", чтобы использовать проверку подлинности Windows.

  2. На странице "Аутентификация" выберите Анонимную проверку подлинности.

  3. На панели "Действия" нажмите "Отключить", чтобы отключить анонимную аутентификацию.

Ответ 3

Если вы не хотите Авторизовать на каждом контроллере или действии, вы можете сделать полную авторизацию в файле web.config. Это должно работать до тех пор, пока вы используете проверку подлинности Windows. Если вы разрешаете ASP.NET управлять аутентификацией, вам не нужно будет настраивать параметры IIS. Затем он должен хорошо работать с любым веб-сервером, на котором вы работаете. Я не знаю и не предполагаю, что вы уже пробовали до сих пор. Я постараюсь быть полным в своем ответе. Сначала отметьте тег проверки подлинности форм в web.config. Все следующие настройки помещаются в раздел конфигурации system.web.

<!--
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
-->

Замените тегом проверки подлинности Windows.

<authentication mode="Windows" />

Затем добавьте тег авторизации, чтобы запретить доступ к анонимным пользователям. Если пользователи используют Internet Explorer и подключаются из зоны интрасети, IE автоматически войдет в систему пользователя. Но если пользователь подключается из интернет-зоны, IE по-прежнему будет отображать окно входа, но для обеспечения безопасности. Но это параметры, которые можно установить из IE.

<authorization>
    <deny users="?" />
</authorization>

Настройка режима аутентификации самостоятельно без авторизации не заставляет пользователя проходить аутентификацию в ASP.NET. Если вы хотите контролировать безопасность из IIS, я не могу много помочь с настройками IIS, но я знаю, что в основном вы можете отключить базовую проверку подлинности, затем включить встроенную проверку подлинности Windows, а затем отключить учетную запись анонимного входа, которая будет достигать тех же или лучших результатов.

В настоящий момент я также работаю над проектом MVC, и я тестировал вышеуказанные настройки с моим проектом, и он работает. Вам не нужен атрибут Авторизовать, так как в конфигурации есть тег авторизации. Я надеюсь, что это может помочь вам, а не получить еще -1. ​​

Ответ 4

Подключен ли атрибут Авторизовать для действия или контроллера ur?

public class HomeController : Controller {
    [Authorize]
    public ActionResult Index() {
         string userName = User.Identity.Name;
         return View();
    }
}