Windows身份验证和Asp.Net Web API

age*_*gez 14 windows-authentication asp.net-mvc-4 asp.net-web-api

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

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

 HttpContext.User.Identity
Run Code Online (Sandbox Code Playgroud)

现在我想使用新的Asp.Net WebAPI进行一些Ajax调用.

有没有办法以与MVC控制器相同的方式获取WindowsIdenty对象?

Mar*_*nes 24

请不要HttpContext从控制器中引用它.

您可以访问Controllers User属性,该属性是在没有直接引用的情况下访问Identity的方式HttpContext.

public class MyController : ApiController
{
    public string Get()
    {
         var indenty = this.User.Identity;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么

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

要阅读有关如何进行单元测试和模拟User属性的更多信息,请阅读此处.有关更多信息,请参阅此处的可移植性.

  • 一个小小的澄清:如果您希望Identity使用User.Identity (2认同)