Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 获取每个请求的用户数据_Asp.net_Asp.net Mvc_Master Pages - Fatal编程技术网

Asp.net 获取每个请求的用户数据

Asp.net 获取每个请求的用户数据,asp.net,asp.net-mvc,master-pages,Asp.net,Asp.net Mvc,Master Pages,我想我的问题很简单。我正在做一个ASP.NETMVC项目。这是一个需要用户随时登录的项目。我可能需要母版页中当前用户的信息,就像这样;“你好,马克-你登录了!” 但是如果我在视图中需要相同的信息呢?或者在我的servicelayer中进行一些验证 那么,如何确保这些信息在我需要的时候、在我需要的地方都可用呢?我遇到了完全相同的问题,还没有找到满意的答案。我们探讨的所有选项都有各种问题。在您提到的特定示例中,您显然可以将该数据存储在会话中,因为这对该示例有效。可能还有其他的场景,我们已经遇到过,这

我想我的问题很简单。我正在做一个ASP.NETMVC项目。这是一个需要用户随时登录的项目。我可能需要母版页中当前用户的信息,就像这样;“你好,马克-你登录了!”

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


那么,如何确保这些信息在我需要的时候、在我需要的地方都可用呢?

我遇到了完全相同的问题,还没有找到满意的答案。我们探讨的所有选项都有各种问题。在您提到的特定示例中,您显然可以将该数据存储在会话中,因为这对该示例有效。可能还有其他的场景,我们已经遇到过,这些场景可能不起作用,但是像这样简单的用户信息在会话中就可以了


我们刚刚设置了一个BaseController,用于确保每个视图的信息总是设置正确的。根据您处理身份验证等的方式,您将在HttpContext.user.Identity.Name中随时提供一些用户数据。也可以引用。

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


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

您应该将它存储在会话中,并通过自定义ModelBinder将其检索到控制器中。

您需要多少用户信息?您始终可以访问Thread.Current.Principal并获取用户名,还可以使用该用户名在数据库中查找有关该用户的更多信息

或者,如果您真的在任何时候都需要一些信息,您可以实现从IPrincipal派生的自定义主体(这真的没什么大不了的!),并在那里添加这些信息,当用户登录时,创建MyCustomPrincipal的实例并将其附加到当前线程。然后,它将随时随地提供


Marc

不确定我是否得到了您想要的,但是如果您正在寻找身份验证和基于角色的授权之类的东西,实际上ASP.net提供了一个很好的框架来处理/开始使用

这(也是第二部分)是我最近发现并阅读的内容,它是提供程序模式的一个很好的开端,有助于理解ASP.net的底层身份验证框架。请务必阅读msdn中的membershipProvider类和RoleProvider类,它们共同构成了一个关于最基本的角色库身份验证的伟大框架(如果您对它们提供的功能感到满意,您甚至不需要编写数据访问部分的代码,所有这些都在默认实现中提供!)


PS:检查上下文。用户属性也是!它存储当前经过身份验证的用户信息。

HttpContext.current.Users.Identity返回当前用户的信息。尽管我不确定在您进行webservice调用时是否会隐式传递该会话。

我们在使用会话时遇到的唯一问题是,根据您所在站点的区域,数据可能会有所不同。例如,在我们的一个应用程序中,我们有一系列联盟,用户有时可能是经理,有时不是。我们必须在会话中存储用户是否是管理员。这非常有效,直到你打开了多个标签,然后一切都变得非常混乱。因此,它适用于登录信息,但当您开始将其用于其他潜在数据时,它就会失效。您能更详细地解释这部分问题吗?听起来,您似乎想在更大程度上考虑使用角色联合您的登录模型。这并不是那么简单,我们有一个用户,在站点的不同元素中可能有多个角色。marc_下面的建议实际上可能会为我们解决这个问题。我们正在进一步研究它,看看它是否提供了一个好的解决方案。