2013-02-14 210 views
14

我有一個基於MVC4的Windows身份驗證的Intranet應用程序。Windows身份驗證和Asp.Net Web API

當我需要的授權目的的WindowsIdentity在控制器我只是用

HttpContext.User.Identity 

現在我想用新的Asp.Net的WebAPI一些Ajax調用。

有沒有一種方法可以像MVC控制器一樣輕鬆獲取WindowsIdenty對象?

回答

24

請不要從控制器引用HttpContext

您可以訪問控制器User屬性,該屬性是通過對HttpContext的正確引用而訪問標識的方式。

public class MyController : ApiController 
{ 
    public string Get() 
    { 
     var indenty = this.User.Identity; 
    } 
} 

爲什麼

這些控制器User屬性提供了一個抽象水平,這允許更容易嘲笑並且因此單元測試。這種抽象還允許更大的便攜性,例如如果這是WebApi Self Host,您甚至無法訪問HttpContext

要詳細瞭解如何進行單元測試並模擬用戶屬性,請閱讀here。有關更多信息,請參閱:可移植性讀取here

+2

一個小小的說明:如果你想要身份使用User.Identity – agez 2013-02-15 16:12:49

+0

當然。更新,謝謝。 – 2013-02-15 16:19:31

+1

嗯,我很欣賞答案的清晰度,如果你解釋爲什麼不從控制器引用HttpContext,這將是每個人的教化。 – dansan 2014-01-06 12:00:53