【问题标题】:MVC3 User.Identity.Name is null, Enironment.UserName is notMVC3 User.Identity.Name 为空,Enironment.UserName 不是
【发布时间】:2012-02-08 21:30:52
【问题描述】:

嗯,这是一个有趣的问题。我有一个在 Visual Studio 开发服务器上运行的 ASP.NET MVC3 Intranet 应用程序,没有 NTLM。我正在测试的机器上没有 AD 域。

当我尝试使用 User.Identity.Name 时,它会引发空引用异常,但是当我使用 Environment.UserDomainEnvironment.UserName 时,它们会填充正确的值。

我对此感到非常困惑。我应该避免使用User.Identity.Name,还是有什么理由让它为空?

更新

我刚刚注意到,当我使用 System.Web.HttpContext.Current.User.Identity.Name 有效,但仅使用 User.Identity.Name 无效。我是否缺少 using 语句?

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

【问题讨论】:

  • 你运行它的代码是什么?整个上下文是什么? (方法,线程...)
  • 我在 Controller 类的构造函数中直接运行这段代码
  • 感谢您的更新。我遇到了同样的问题,System.Web.HttpContext.Current.User.Identity.Name 解决了它。谢谢!

标签: asp.net-mvc-3 nullreferenceexception httpcontext


【解决方案1】:

Environment.UserName 只是告诉当前正在运行您的程序的用户,在您的情况下,我猜是运行开发服务器的用户,不必对 asp.net 做任何事情。

User.Identity.Name 完全不同...它告诉您当前上下文中登录人的姓名。顺便说一句,您不必让 NTLM 使用它...您可以设置 SqlMembershipProvider 或自定义成员资格提供程序并使用表单身份验证,它可以在没有 AD 的情况下正常工作。

【讨论】:

  • 所以,我将让这个 Web 应用程序在公司 Intranet 上运行,部署时将具有 Active Directory。在我的机器上开发过程中如何使用 User.Identity.Name,而我的机器不在 AD 域中?
  • @Kev 我很想了解自己,因为在没有 AD 的情况下测试 Windows 身份验证时我遇到了同样的问题。只要我知道没有办法在开发服务器上使用 Windows 身份验证......你需要 IIS 并且你需要 AD。很确定这会成为一个很好的单独的堆栈溢出问题。
猜你喜欢
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多