将项目迁移到MVC5后,声明问题,意外调用GetRolesForUser

时间:2015-10-19 12:56:30

标签: c# authentication asp.net-mvc-5.2

一个项目已经从MVC 4更新到MVC 5,因为Visual Studio 2015的新用法没有正确编译剃刀视图(这是微软记录的内容,而不是问题)。 我们使用跨项目的实用程序类来检索存储在Identity Claims中的值。

在那堂课上,有人打电话给:

System.Security.Claims.ClaimsPrincipal.Current.Claims.ToList()

在以前的MVC4版本中工作,但在迁移MVC5所需的所有Nuget包之后,此特定调用会引发以下错误:

  

System.Web.Providers.dll中发生了'System.ArgumentNullException'类型的异常,但未在用户代码中处理

     

值不能为空。

     

参数名称:用户名

     

System.Web.Providers.DefaultRoleProvider.GetRolesForUser(字符串   username)+183 System.Web.Security.RolePrincipal.GetRoles()+215
  System.Web.Security.d__1.MoveNext()+58
  System.Security.Claims.d__1.MoveNext()+253
  System.Security.Claims.d__1.MoveNext()+ 209   System.Collections.Generic.List 1..ctor(IEnumerable 1个集合)+445   System.Linq.Enumerable.ToList(IEnumerable`1 source)+58

我在该集合上做了一个foreach(),就像在所有自定义的声明之后,它达到了意外的结束,或者它试图从GetRoleForUser中检索东西,我不知道为什么。

如果有人提示,我可以根据需要提供更多详细信息。

设置该MVC项目的Web.Config:

<modules>
      <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
      <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
      <add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
      <remove name="FormsAuthentication" />
    </modules>
....

<system.identityModel>
    <identityConfiguration>
      <audienceUris>
        <add value="http://localhost:58663/" />
      </audienceUris>
      <securityTokenHandlers>
        <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </securityTokenHandlers>
      <certificateValidation certificateValidationMode="None" />
      <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
        <authority name="QuadraSTS">
          <keys>
            <add thumbprint="XXXHIDDENXXX" />
          </keys>
          <validIssuers>
            <add name="QuadraSTS" />
          </validIssuers>
        </authority>
      </issuerNameRegistry>
      <claimsAuthorizationManager type="ClaimsBasedAuthorization.AuthorizationManager,QuadraBox" />
    </identityConfiguration>
  </system.identityModel>
  <system.identityModel.services>
    <federationConfiguration>
      <cookieHandler requireSsl="false" persistentSessionLifetime="1.0:0:0" path="/" />
      <wsFederation passiveRedirectEnabled="true" persistentCookiesOnPassiveRedirects="true" issuer="http://something:97/QuadraSTSBeta/" realm="http://localhost:58663/" requireHttps="false" />
    </federationConfiguration>
  </system.identityModel.services>

1 个答案:

答案 0 :(得分:0)

问题主要是由于WebMatrix Data错误地尝试加载用户角色造成的。

因为它没有在项目中使用,并且没有理由在该项目中出现,所以我决定将其删除。

卸载WebMatrix nuget,并删除项目中所有WebMatrix的引用解决了这个问题。