如何访问UserId
在ASP.NET成员没有ASP.NET Web应用程序项目使用Membership.GetUser(username)
?如何在不使用Membership.GetUser()的情况下访问ASP.NET Membership中的UserId?
可以UserId
包含在Profile
命名空间旁边UserName
(System.Web.Profile.ProfileBase
)?
如何访问UserId
在ASP.NET成员没有ASP.NET Web应用程序项目使用Membership.GetUser(username)
?如何在不使用Membership.GetUser()的情况下访问ASP.NET Membership中的UserId?
可以UserId
包含在Profile
命名空间旁边UserName
(System.Web.Profile.ProfileBase
)?
我决定自己编写用户用户身份验证(非常简单但有效),我应该很久以前就完成了。
我原来的问题是关于用户ID,它是不是可从以下
System.Web.HttpContext.Current.User.Identity.Name
继续您的文章,如果您使用Microsoft.AspNet.Identity导入;你将有权访问User.Identity.GetUserId() – 2014-03-02 03:41:32
是您的原因,以节省您需要的用户ID数据库调用每次?如果是这样,当我使用ASP.NET MembershipProvider时,我通常会做一个自定义提供程序,允许我缓存该调用,或者我可以缓存的实用程序方法。
如果你正在考虑将它放在档案中,我看不出有任何理由这样做,特别是因为它也仍然需要一个数据库调用,除非你使用自定义配置文件提供者那里,它有解析出UserId的附加处理。
如果你想知道为什么他们没有实现GetUserId方法,它只是因为你并不总是保证该用户ID将是一个GUID作为包括供应商。
编辑:
见ScottGu's article on providers其提供link to downloading the actual source code for i.e. SqlMembershipProvider。
但最简单的事情要做的是在用户对象或实用程序类中的GetUserId()方法,其中如果存在用户对象或实用程序类,则从缓存/会话获取UserId,否则请按数据库中的用户名(或存储在会话中),并返回它。
对于一些更多的考虑(但必须非常小心,因为cookie的大小限制):Forms Auth: Membership, Roles and Profile with no Providers and no Session
好的小文章在你的答案结束。 – 2011-04-25 13:44:59
你有两个选择:
1)使用的用户名作为用户数据表 主键即:
select * from [dbo.User] where Username = 'andrew.myhre'
2)将UserID添加到配置文件。
每种方法都有优点和缺点。我个人更喜欢第一个,因为这意味着我不一定需要设置开箱即用的配置文件提供程序,而且我更喜欢在我的系统中执行唯一的用户名。
安德鲁:我会小心这样做,就像你出什么作为默认的查询,没有索引与这样您运行全表扫描的风险相匹配。而且,如果您将用户数据库用于多个应用程序,则未包含应用程序ID。
最接近的索引是aspnet_Users_Index需要的applicationID和LoweredUserName。
编辑:
哎呀 - 重读安德鲁公司的职位,他没有做一个选择*上aspnet_Users表格内,而是使用用户名作为主键自定义配置文件/用户表。
您是否尝试过使用System.Web.HttpContext.Current.User.Identity.Name
? (请确保验证User
和Identity
先不为空。)
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}
会给你从aspnet_Membership表当前用户的用户名(唯一标识符) - 提供目前已成功登录如果您尝试<%=%>或在成功认证之前分配该值,则会收到错误“未将对象引用设置为对象的实例”。
试试这个:
MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
我有这个问题,解决方法是在web.config配置,尝试用这些配置的web.config:
<roleManager
enabled="true"
cacheRolesInCookie="true"
defaultProvider="QuickStartRoleManagerSqlProvider"
cookieName=".ASPXROLES"
cookiePath="/"
cookieTimeout="30"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
createPersistentCookie="false"
cookieProtection="All">
<providers>
<add name="QuickStartRoleManagerSqlProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ASPNETDB"
applicationName="SecurityQuickStart"/>
</providers>
</roleManager>
尝试如下:
Membership.GetUser().ProviderUserKey
public string GetUserID()
{
MembershipUser _User;
string _UserId = "";
_User = Membership.GetUser();
Guid UserId = (Guid)_User.ProviderUserKey;
return _UserId = UserId.ToString();
}
你可以扩展的原因是什么? – Kev 2008-09-28 23:49:29
当我打电话给Membership.GetUser()。ProviderUserKey每次都是调用数据库来检索这个UserId – GrZeCh 2008-09-29 07:40:06