【问题标题】:Getting the username inside a model class在模型类中获取用户名
【发布时间】:2010-10-23 16:26:16
【问题描述】:

我正在尝试使用我的一些模型(如 CreatedAt、UpdatedAt、CreatedBy 和 UpdatedBy)实现基本审计。

日期/时间部分已完成。当属性发生变化时(实现INotifyPropertyChanging, INotifyPropertyChanged),我会在模型上抛出事件,并且可以很好地更新对应的字段。

我只需要知道如何获取当前用户名,而不必每次实例化或获取模型的现有实例时都通过控制器。

【问题讨论】:

    标签: c# asp.net-mvc model audit


    【解决方案1】:

    引用 System.Web 并使用 HttpContext.Current.User.Identity.Name 像魅力一样工作。

    我不知道。谢谢。 我是这样做的:

    Membership.GetUser().UserName
    

    哪种方式更快?

    【讨论】:

    • 考虑到 HttpContext 中已经填充了 User 对象,应该会更快。
    • 没什么大不了的,因为这是一个“主要阅读”的应用程序。
    【解决方案2】:

    谈论身份的抽象方式是“主体”——参见this thread。我希望这段代码可以让您在无需了解登录实现的情况下获得身份:

    public static class SomeUtilityClass {
        public static string GetUsername() {
            IPrincipal principal = Thread.CurrentPrincipal;
            IIdentity identity = principal == null ? null : principal.Identity;
            return identity == null ? null : identity.Name;
        }
    }
    ...
    
    record.UpdatedBy = record.CreatedBy = SomeUtilityClass.GetUsername();
    

    【讨论】:

    • 我不想一直指定它,所以订阅事件并在模型本身上执行它会更好。感谢您的参考。
    【解决方案3】:

    引用 System.Web 并使用 HttpContext.Current.User.Identity.Name 就像一个魅力。

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 1970-01-01
      • 2013-05-04
      • 2011-04-05
      • 2020-06-25
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2016-02-14
      相关资源
      最近更新 更多