2013-02-25 36 views
1

我工作的一個MVC 3 Intranet應用程序(Windows身份驗證)。我想在我的控制器操作中使用當前登錄用戶的用戶名。我嘗試了很多變化,但無法獲得用戶名。我嘗試使用Environment.Username它在調試模式下運行良好,但部署時提供了池名稱而不是用戶名。獲取當前登錄的用戶在控制器行動MVC 3

控制器動作。

public ActionResult Index() 
     { 
      LoggedUser usr = new LoggedUser(); 
      var aa = usr.User; 
     } 

LoggedUser

public class LoggedUser : Controller 
    { 
     public LoggedUser() 
     { 

     } 
    } 

我下面這篇文章,但無法使其工作Getting the logged in username in ASP.NET MVC3 intranet application

任何幫助?

回答

2

要檢索當前登錄用戶名,你可以用你的行動裏面User.Identity.Name屬性:

public ActionResult Index() 
{ 
    string usr = User.Identity.Name; 
    ... 
} 

你已經在你的問題中的代碼不正確。您已經定義了一個LoggedUser並實例化這個控制器內部的一些Index行動。你不應該手動實例化控制器。這是該框架的責任。

+0

它即將空白 – ankur 2013-02-25 10:03:34

+0

這意味着您沒有經過身份驗證的用戶。您是否正確配置Windows身份驗證?你在網絡服務器上啓用了它嗎?你在域內運行嗎?你有一個有效的域用戶嗎? – 2013-02-25 10:04:19

+0

它只是一個默認構造函數,我爲了獲得基類 – ankur 2013-02-25 10:05:08

0

整個的討論是關於什麼是實拍,聽起來像一個權限的「狀態」,在方法/功能的訪問,確實聽起來像一個更大的概念有什麼可以住在這樣的對象控制器,使一類類型的「國家觀念」 ......關於是否生活在模型/視圖/控制器的所有討論中,可以通過在參數交換用ID /對象的決心,但因爲它是訪問數據的需要,不是爲了控制工作,是工作對於數據模型的DBMS和結構化數據訪問內存結構來說,可以爲任何形式/類型/結構的類建模一個「想法/連接/任務」類的作業。關於模型/控制器的所有討論都是關於效率的,所有情況下效率都是DBMS。

0

,如果你想使用需要用戶名控制器級別的變量,可以覆蓋OnActionExecuting事件,您可以訪問身份驗證的用戶ID。您可能必須檢查用戶身份爲空,以保持謹慎。

Obj myObj; 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     myObj = new Obj(User.Identity.Name); 
     base.OnActionExecuting(filterContext); 
    } 
相關問題