猿问

如何在Asp.Net Web API控制器构造函数中注入用户身份?

我有一个用[Authorize]属性装饰的控制器。我想完成以下工作,以便不必重复创建存储库obj并在每个方法中传递currentUser:


[Authorize]

public class HomeController : ApiController

{

    Repository repo;     


    public HomeController()

    {

        var userName = User.Identity.IsAuthenticated ? User.Identity.Name : null;


        repo = new Repository(userName);


    }           


}

我知道User.Identity在构造函数或Initialize方法中不可用。在控制器构造函数中注入经过身份验证的用户的最佳实践是什么?


如果我们使用依赖项注入-在Register方法中将自定义创建的UserResolverService注册到WebApiConfig.cs中时-User.Identity也将不可用。


这是Web API的一个非常常见的问题,但不知何故找不到任何显示正确解决方案的文章。


它真的可以实现吗?如果可以,请提供一些示例代码吗?


素胚勾勒不出你
浏览 217回答 2
2回答

哈士奇WWW

您可以注册工厂代表并从中获取用户身份HttpContext.Current。这是一个示例代码&nbsp;simpleinjectorcontainer.Register<IPrincipal>(()&nbsp;=>&nbsp;HttpContext.Current.User);
随时随地看视频慕课网APP
我要回答