2012-02-08 33 views
2

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

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

我对此感到非常困惑。我应该避免使用User.Identity.Name,或者有没有原因为空?

UPDATE

我注意到,当我使用 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; 
+0

你在哪里运行这个代码?什么是整体环境? (方法,线程...) – 2012-02-08 21:43:45

+0

我在Controller类中直接运行此代码,在构造函数中 – Kev 2012-02-09 04:08:07

+0

感谢您的UPDATE。我有同样的问题和System.Web.HttpContext.Current.User.Identity.Name解决它。谢谢! – 2013-09-19 14:22:47

回答

1

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

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

+0

所以,我打算让这个Web应用程序运行在企业内部网上,部署时会有Active目录。如何在我的机器上开发期间使用User.Identity.Name,该机器不在AD域中? – Kev 2012-02-09 03:33:43

+0

@Kev我很想知道我自己,因为我在测试没有AD的Windows身份验证时遇到同样的问题。只要我知道有没有办法使用开发服务器的Windows身份验证......你需要IIS,你需要AD。很确定这会造成一个很好的单独堆栈溢出问题。 – m0s 2012-02-09 04:42:59