Windows身份验证和Asp.Net Web API

14

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

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

 HttpContext.User.Identity

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

是否有一种像在MVC Controller中那样轻松地获取WindowsIdentity对象的方法?

1个回答

24
请不要在控制器中引用 HttpContext。您可以访问控制器的User属性,这是一种无需直接引用HttpContext就能访问身份验证信息的方式。
public class MyController : ApiController
{
    public string Get()
    {
         var indenty = this.User.Identity;
    }
}

为什么

控制器的User属性提供了一种抽象层,使得模拟测试变得更容易,这个抽象层也可以实现更大的可移植性,例如如果使用了WebApi Self Host,你甚至无法访问 HttpContext

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


2
一个小澄清:如果您想使用身份验证,请使用User.Identity。 - agez
1
虽然我很欣赏你的回答清晰明了,但如果您能解释一下为什么在控制器中不应该引用HttpContext,那对于每个人来说都会有所启发。 - dansan
@dansan 感谢您的评论。我已经简要解释了原因。 - Mark Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接