嗯,这是一个有趣的问题。我有一个在Visual Studio开发服务器上运行的ASP.NET MVC3 Intranet应用程序,没有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;
答案 0 :(得分:1)
Environment.UserName只告诉当前正在运行程序的用户,在你的情况下,运行开发服务器的用户我认为不需要对asp.net做任何事情。
User.Identity.Name完全不同......它会告诉您当前上下文中登录人员的姓名。顺便说一句,你不必让NTLM使用它...你可以设置SqlMembershipProvider或自定义成员资格提供程序并使用表单身份验证,它可以在没有AD的情况下正常工作。