【问题标题】:MVC 5 HttpContext.User in data project数据项目中的 MVC 5 HttpContext.User
【发布时间】:2014-05-06 11:22:17
【问题描述】:

我有一个解决方案,其中三个项目的组织方式如下:

数据(实体框架)-> 服务-> Web(MVC)。

如何从 Controller 中的 HttpContext 获取数据项目中的当前 loget 用户? 我需要在 DB 中设置列​​,例如 CreatedBy 和 ModifiedBy,然后创建/编辑项目。 (认证方式为“表单”)

感谢您的建议。

【问题讨论】:

    标签: asp.net-mvc entity-framework-5 asp.net-mvc-5 httpcontext


    【解决方案1】:

    在这里查看我的答案。 Get UserId from class library project

    几乎是一样的。在您的 MVC 控制器中,创建一个变量并像这样存储用户名 - string user = User.Identity.Name;

    然后只需将参数添加到您需要用户在数据项目中使用的任何方法,并将用户变量传递给您的方法。

    【讨论】:

    • 我了解你吗?但是这个解决方案并不好,因为我现在有大约 1000 种方法。我需要在我的实体覆盖的 SaveChenges() 方法中获取用户,以设置字段 ModifiedBy 和 CreatedBy。 SaveChanges() 方法将自动为所有表设置我的字段。因为在您的解决方案中,我必须为所有创建或保存手动设置这些字段。想象一下 1000 个方法和 2 个字段将是 2000 行代码:)
    • @MantvydasOzerenskis 是的,我建议的方法不适用于这么多方法,它可以,但它远非最佳方法。你能发布你的 SaveChanges() 方法吗?
    【解决方案2】:

    好的,我找到了解决方案。我创建了一个基础服务类,其中添加了带有用户参数的构造函数,然后将我的基础服务类分配给所有服务。

    【讨论】:

      【解决方案3】:

      我创建了一个可在任何地方重用的静态类。

          public static class GetUserName
          {
              public static string Name(IPrincipal user)
              {
                  return user==null? HttpContext.Current.User.Identity.Name:user.Identity.Name;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 2018-12-09
        • 2018-11-06
        • 2013-11-28
        • 2018-02-19
        • 2013-08-31
        相关资源
        最近更新 更多