一个项目已经从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.List1..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>
答案 0 :(得分:0)
问题主要是由于WebMatrix Data错误地尝试加载用户角色造成的。
因为它没有在项目中使用,并且没有理由在该项目中出现,所以我决定将其删除。
卸载WebMatrix nuget,并删除项目中所有WebMatrix的引用解决了这个问题。