在ActionResult方法之外找到用户

时间:2017-03-24 15:16:05

标签: c# asp.net-mvc

我问过question

即使该答案解决了我收到的错误消息..我想找到当前正在使用该应用程序的用户...而不是必须在每个操作方法中写入...

var userIdentity = HttpContext.User.Identity.Name.Split('\\')[1].Replace(".", " ");

我想在任何ActionResult方法之前将它放在控制器类的顶部,这样我就可以在每个操作方法中引用变量而不是如上所示的整行...甚至在构造函数中设置它这样我根本不必参考它。

感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

您可以创建扩展方法

public static class ExtensionHelper {
    public static string UserIdentity(this HttpContext context)
    {
        return context.User.Identity.Name.Split('\\')[1].Replace(".", " ");
    }
}

在Conttroller中使用

var identity = HttpContext.UserIdentity()

如果看起来更干净,你可以用控制器扩展做同样的事情。

public static class ExtensionHelper
{
    public static string UserIdentity(this Controller controller)
    {
        return controller.HttpContext.User.Identity.Name.Split('\\')[1].Replace(".", " ");
    }
}

在Conttroller中使用

var identity = this.UserIdentity()

那说如果你使用一个合适的IoC或DI框架然后有一个Context类可以注入,如果有一个用户上下文就启动了这个状态会更干净。然后,您可以将其注入Controller,而不是尝试扩展控制器。我个人最喜欢的是AutoFac,但有很多,使用几乎任何DI框架完成此操作相对简单。