2013-02-14 153 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