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
.net 验证模型-最佳实践_.net_Asp.net Mvc - Fatal编程技术网

.net 验证模型-最佳实践

.net 验证模型-最佳实践,.net,asp.net-mvc,.net,Asp.net Mvc,我是从php进入ASP.NET的,所以我问这个问题的原因是因为应用程序的工作方式和处理请求的方式完全不同 我有一个包含用户信誉度的exists表,例如: id、登录名、密码(sha哈希)、电子邮件、电话、房间 我已经构建了自定义成员资格提供程序,因此它可以处理我自己的数据库身份验证模式 现在我很困惑,因为User.Identity.Name只包含用户的登录名,而不包含完整的对象(我使用linq2sql与数据库通信,需要在它的用户对象中工作) 在php应用程序中,我只是将用户对象存储在Auth类(

我是从php进入ASP.NET的,所以我问这个问题的原因是因为应用程序的工作方式和处理请求的方式完全不同

我有一个包含用户信誉度的exists表,例如: id、登录名、密码(sha哈希)、电子邮件、电话、房间

我已经构建了自定义成员资格提供程序,因此它可以处理我自己的数据库身份验证模式

现在我很困惑,因为User.Identity.Name只包含用户的登录名,而不包含完整的对象(我使用linq2sql与数据库通信,需要在它的用户对象中工作)

在php应用程序中,我只是将用户对象存储在Auth类(或其他类)的某个静态方法中,但在ASP.NET MVC中,我无法做到这一点,因为静态成员在所有请求和永久请求中共享,而不仅仅存在于当前请求中(就像在php中一样)

所以我的问题是:我应该如何以及在何处检索和存储linq2sql用户对象,以便在当前和唯一的当前请求中使用它?(成功处理请求后,我希望它将从内存中释放,并在下一个请求时再次创建)


或者我完全走错了路?

如果您实现了MembershipProvider,那么您知道它有一个GetUser方法,该方法基于用户名获取MembershipUser对象

在项目的任何页面中,如果运行Membership.GetUser(),它将在当前启用的身份验证提供程序中运行GetUser(username)方法。在一个简单的基本解决方案中,此调用将转到数据库,并在每次访问时获取用户详细信息

我在项目中所做的是将当前用户存储在会话变量中。这样,该用户的当前浏览器会话将存储用户对象。这很简单,也很好,因为ASP.NET身份验证基于当前会话


需要注意的一点是,每次用户注销时,都应该清除该会话变量。在我的例子中,我使用Session.放弃()只是为了确保。除此之外,这是我到目前为止使用的方法,非常有效

我建议创建一个自定义的IPrincipal和IIdentity类,它还可以与您的会员提供商交互并设置这些类。这样,身份随着执行而移动,这就是它通常的工作方式