在ActionResult方法之外找到用户

我问过这个问题 。

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

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

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

任何帮助表示赞赏。

您可以创建一个Extension方法

 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框架实现这一点相对简单。