加上@Html.AntiForgeryToken() 就报这个错误。是什么意思呢。
登录使用了SignManager
把错误堆栈信息贴上来
实在不太明白
@挨踢新手:
internal static string[] GetUniqueIdentifierParameters(ClaimsIdentity claimsIdentity, string uniqueClaimTypeIdentifier) { IEnumerable<Claim> claims = claimsIdentity.GetClaims(); if (!string.IsNullOrEmpty(uniqueClaimTypeIdentifier)) { Claim claim4 = claims.SingleOrDefault((Claim claim) => string.Equals(uniqueClaimTypeIdentifier, claim.ClaimType, StringComparison.Ordinal)); if (claim4 == null || string.IsNullOrEmpty(claim4.Value)) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, WebPageResources.ClaimUidExtractor_ClaimNotPresent, new object[] { uniqueClaimTypeIdentifier })); } return new string[] { uniqueClaimTypeIdentifier, claim4.Value }; }
claims.SingleOrDefault异常了。
action里面看看是不是有重复的claimtype。
如果你没有修改System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier的化。就看claimtype有没有多个等于string.empty的。
(this.User.Identity as System.Security.Claims.ClaimsIdentity).Claims
@calvinK: 十分感谢
Claims.Add(new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()))
Claims.Add(new Claim(ClaimTypes.GivenName, user.UserName))
手动添加了这两个Claim导致的。这两个Claim在SignManager中会自动添加