2009-07-18 31 views
3

我的问题很简单 - 我想。我在做一个ASP.NET MVC项目。这是一个需要用户随时登录的项目。我可能需要MasterPage中的当前用户信息,就像这样; “你好,马克 - 你登录了!”。获取每个请求的userdata

但是如果我在视图中需要相同的信息呢?或者在我的服务层进行一些验证?

那么如何确保这些信息在需要时可用,以及我需要它的地方?

回答

2

您需要多少用户信息?您始终可以访问Thread.Current.Principal并获取用户名 - 并可能使用它来查找数据库中用户的更多信息。

或者如果你真的确实真的确需要一些信息,你可以实现你自己的自定义委托人派生自IPrincipal(这真的不是什么大问题!),并在那里添加那些信息位,用户登录,创建MyCustomPrincipal的实例并将其附加到当前线程。随后,它随时随地都可以使用。

马克

1

我有完全相同的问题,还没有找到满意的答案。我们探索的所有选项都有各种问题。在你提到的具体例子中,你显然可以将这些数据存储在会话中,因为这可以用于该示例。可能还有其他情况,我们有,可能无法正常工作,但会话中的简单用户信息就没有问题。

我们刚刚设置了一个BaseController,用于处理确保每个视图的信息始终设置正确。根据你如何处理身份验证等,你会在HttpContext.User.Identity.Name中随时获得一些用户数据。哪些也可以引用。

0

构建模型的层次结构并将共享信息放入基本模型中。这样它将可用于任何视图或局部视图。

当然,每次请求都必须检索它,因为Web应用程序不是持久的。

0

您应该将其存储在Session中并通过自定义ModelBinder将其检索到您的控制器中。

+0

我们在使用会话时遇到问题的唯一问题是数据可能因所在网站的区域而异。例如,我们在其中一个应用中有一系列联盟,其中有时用户可能是经理,有时候可能不是。我们必须存储用户是否在会话中管理。这很好,直到你有多个标签打开,然后它开始变得非常混乱。所以它适用于登录信息,但是当你开始将它用于潜在的其他数据时会下降。 – pauldunlop 2009-07-18 14:11:26

0

不知道如果我得到你想要问什么,但如果你正在寻找的东西,如身份验证和基于角色的授权,实际上是ASP.net提供了一个很大的框架上下工夫/开始。

article(也是第二部分)是我最近发现并阅读的内容,它有助于理解ASP.net底层认证框架的提供者模式。一定要仔细阅读msdn中的membershipProvider类和RoleProvider类,它们一起在大多数基本的基于角色的身份验证上做出了很好的框架(如果你对它们提供的功能感到满意,你甚至不需要代码数据访问部分,都是在默认实现中提供的!)

PS:查看Context.Users属性呢!它存储当前认证的用户信息。

0

HttpContext.Current.Users.Identity返回当前用户的信息。虽然我不确定它是否在您进行web服务调用时被隐式传递。