14

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

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

 HttpContext.User.Identity

现在我想将新的 Asp.Net WebAPI 用于一些 Ajax 调用。

有没有办法像在 MVC 控制器中一样简单地获取 WindowsIdenty 对象?

4

1 回答 1

24

请不要HttpContext从控制器中引用。

您可以访问 ControllersUser属性,这是通过不直接引用来访问身份的方式HttpContext

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

为什么

controllersUser属性提供了一个抽象级别,允许更轻松地进行模拟和单元测试。这种抽象还允许更大的可移植性,例如,如果这是 WebApi Self Host,您甚至无法访问HttpContext.

要阅读更多关于如何单元测试和模拟 User 属性的信息,请阅读此处。有关更多信息:请阅读此处的便携性。

于 2013-02-14T13:44:01.263 回答