2008-09-28 69 views
16

如何访问UserId在ASP.NET成员没有ASP.NET Web应用程序项目使用Membership.GetUser(username)如何在不使用Membership.GetUser()的情况下访问ASP.NET Membership中的UserId?

可以UserId包含在Profile命名空间旁边UserNameSystem.Web.Profile.ProfileBase)?

+0

你可以扩展的原因是什么? – Kev 2008-09-28 23:49:29

+1

当我打电话给Membership.GetUser()。ProviderUserKey每次都是调用数据库来检索这个UserId – GrZeCh 2008-09-29 07:40:06

回答

4

我决定自己编写用户用户身份验证(非常简单但有效),我应该很久以前就完成了。

我原来的问题是关于用户ID,它是不是可从以下

System.Web.HttpContext.Current.User.Identity.Name 
+1

继续您的文章,如果您使用Microsoft.AspNet.Identity导入;你将有权访问User.Identity.GetUserId() – 2014-03-02 03:41:32

13

是您的原因,以节省您需要的用户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

+0

好的小文章在你的答案结束。 – 2011-04-25 13:44:59

0

你有两个选择:

1)使用的用户名作为用户数据表 主键即:

select * from [dbo.User] where Username = 'andrew.myhre' 

2)将UserID添加到配置文件。

每种方法都有优点和缺点。我个人更喜欢第一个,因为这意味着我不一定需要设置开箱即用的配置文件提供程序,而且我更喜欢在我的系统中执行唯一的用户名。

0

安德鲁:我会小心这样做,就像你出什么作为默认的查询,没有索引与这样您运行全表扫描的风险相匹配。而且,如果您将用户数据库用于多个应用程序,则未包含应用程序ID。

最接近的索引是aspnet_Users_Index需要的applicationID和LoweredUserName。

编辑:

哎呀 - 重读安德鲁公司的职位,他没有做一个选择*上aspnet_Users表格内,而是使用用户名作为主键自定义配置文件/用户表。

0

您是否尝试过使用System.Web.HttpContext.Current.User.Identity.Name? (请确保验证UserIdentity先不为空。)

0
{ 
MembershipUser m = Membership.GetUser(); 
Response.Write("ID: " + m.ProviderUserKey.ToString()); 
} 

会给你从aspnet_Membership表当前用户的用户名(唯一标识符) - 提供目前已成功登录如果您尝试<%=%>或在成功认证之前分配该值,则会收到错误“未将对象引用设置为对象的实例”。

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

22

试试这个:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name); 
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey); 
0

我有这个问题,解决方法是在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> 
2

尝试如下:

Membership.GetUser().ProviderUserKey 
1
public string GetUserID() 
      { 
       MembershipUser _User; 
       string _UserId = ""; 
       _User = Membership.GetUser(); 
       Guid UserId = (Guid)_User.ProviderUserKey; 
       return _UserId = UserId.ToString(); 
      } 
相关问题