2012-02-08 32 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