Asp.net mvc 4 Windows身份验证和Asp.NETWebAPI

Asp.net mvc 4 Windows身份验证和Asp.NETWebAPI,asp.net-mvc-4,asp.net-web-api,windows-authentication,Asp.net Mvc 4,Asp.net Web Api,Windows Authentication,我有一个基于MVC4的具有Windows身份验证的Intranet应用程序 当我在控制器中需要WindowsIdentity进行授权时,我只使用它 HttpContext.User.Identity 现在我想将新的Asp.NETWebAPI用于一些Ajax调用 有没有一种方法可以像在MVC控制器中一样简单地获取WindowsIdentity对象?请不要从控制器中引用HttpContext 您可以通过访问控制器属性来访问标识,而无需直接引用HttpContext public class My

我有一个基于MVC4的具有Windows身份验证的Intranet应用程序

当我在控制器中需要WindowsIdentity进行授权时,我只使用它

 HttpContext.User.Identity
现在我想将新的Asp.NETWebAPI用于一些Ajax调用


有没有一种方法可以像在MVC控制器中一样简单地获取WindowsIdentity对象?

请不要从控制器中引用
HttpContext

您可以通过访问控制器属性来访问标识,而无需直接引用
HttpContext

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

controllers
User
属性提供了一个抽象级别,允许更容易的模拟,从而可以进行单元测试。这种抽象还允许更大的可移植性,例如,如果这是WebApi自宿主,您甚至无法访问
HttpContext


要了解有关如何单元测试和模拟用户属性的更多信息,请阅读。有关更多信息,请阅读:可移植性。

一个小的澄清:如果您想让Identity使用User.Identity,我很感激答案的清晰性,如果您解释为什么不从控制器引用HttpContext,那将对每个人都有启发。@dansan感谢您的评论。我已经简要解释了原因。