C# Can';无法获取当前用户的guid

C# Can';无法获取当前用户的guid,c#,asp.net-mvc,authentication,C#,Asp.net Mvc,Authentication,在和之后,我获得了用户名(似乎是正确的)。但是,当我按如下方式进行调用时,我得到null 用户肯定在数据库中,我在MVC.NET模板中使用了标准注册模块。由于其他地方的要求,我需要生成实际的guid,不能使用用户名 这是我的Web.config的一部分,我怀疑可能与此相关。我对安全问题不在行 <system.web> <authentication mode="None" /> <compilation debug="true" targetFramewor

在和之后,我获得了用户名(似乎是正确的)。但是,当我按如下方式进行调用时,我得到null

用户肯定在数据库中,我在MVC.NET模板中使用了标准注册模块。由于其他地方的要求,我需要生成实际的guid,不能使用用户名

这是我的Web.config的一部分,我怀疑可能与此相关。我对安全问题不在行

<system.web>
  <authentication mode="None" />
  <compilation debug="true" targetFramework="4.5.2" />
  <customErrors mode="Off"></customErrors>
  <httpRuntime targetFramework="4.5.2" />
</system.web>
<system.webServer>
  <modules>
    <remove name="FormsAuthentication" />
  </modules>
</system.webServer>

首先,由于您使用的是来自模板的安全性,因此不必使用
成员身份。你需要得到的是正确的身份类型。然后,您可以访问该用户的所有声明

有一种方法可以获取当前用户的名称和guid,您可以让intellisense指导您。然而,安全问题还有很多要考虑的,所以如果你好奇,继续阅读。
有角色、用户id、安全提供者等声明。因为所有这些都收集在一个列表中,所以您需要筛选出适合您的情况的声明。作为帮助,您有字符串字段,例如和,用于通常请求的索赔

var identity = User.Identity as ClaimsIdentity;
var roles = identity.Claims
  .Where(c => c.Type == identity.RoleClaimType)
  .Select(c => c.Value);

另外,请注意,在基本情况下(索赔使用单一标识),建议应用更多的标识(它还具有属性)。

根据您提供的链接和发布的代码,您在哪里获得Guid,例如
Guid Guid=(Guid)Membership.GetUser().ProviderUserKey@MethodMan不确定我是否理解你的问题。前两个对象为null,因此不可能从属性ProviderUserKey获取任何值。如果您遵循博客链接中的示例,不确定为什么它对您不起作用,您的成员资格设置是否正确。config看起来像@MethodMan安全问题,这是我的弱点。我不确定在配置文件中查找什么。当然,我对成员资格一无所知。提供的链接给出了如何在配置文件中设置条目的示例
var identity = User.Identity as ClaimsIdentity;
var roles = identity.Claims
  .Where(c => c.Type == identity.RoleClaimType)
  .Select(c => c.Value);