数据项目中的 MVC 5 HttpContext.User
Posted
技术标签:
【中文标题】数据项目中的 MVC 5 HttpContext.User【英文标题】:MVC 5 HttpContext.User in data project 【发布时间】:2014-05-06 11:22:17 【问题描述】:我有一个解决方案,其中三个项目的组织方式如下:
数据(实体框架)-> 服务-> Web(MVC)。
如何从 Controller 中的 HttpContext 获取数据项目中的当前 loget 用户? 我需要在 DB 中设置列,例如 CreatedBy 和 ModifiedBy,然后创建/编辑项目。 (认证方式为“表单”)
感谢您的建议。
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于数据项目中的 MVC 5 HttpContext.User的主要内容,如果未能解决你的问题,请参考以下文章
用于单元测试 .NET 核心 MVC 控制器的模拟 HttpContext?
HttpContext.Current.User.Identity.Name为Empty
HttpContext.Current.Session[strName]未将对象引用设置到对象的实例