【问题标题】:Input string was not in a correct format error on using int keys使用 int 键时输入字符串的格式不正确
【发布时间】:2016-03-17 12:59:42
【问题描述】:

首先我想向您保证,我已经阅读了许多类似标题的帖子。

我创建了一个 ASP.NET MVC 项目,并按照本文将模板表的键更改为 int

http://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity

但我在 StartUp.Auth.cs 的这一行中遇到运行时错误

getUserIdCallback: (id) => (id.GetUserId<int>()))

Error = System.FormatException:输入字符串的格式不正确。任何帮助表示赞赏。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-identity


    【解决方案1】:

    我知道这是迟到的回应。但是对于将来可能会遇到这种情况的人:清除缓存或切换到其他浏览器。

    虽然您在代码中将 pk 从 string 更改为 int 并更新了 Identity 相关表,但 cookie 仍然是您使用字符串 pks 登录的那个。

    【讨论】:

    • 我还必须删除现有的数据库条目。然后它工作了
    • 新浏览器对我有用,但清除缓存不起作用。我什至更改了它运行的端口,但它仍然出错
    • @Zapnologica 你删除了现有的数据库条目吗?
    • 有没有一种可以做服务器端的解决方案,其中 cookie 因为无效而被拒绝,然后将用户带到登录屏幕?
    【解决方案2】:

    要消除此错误,您需要清除网站的 cookie。

    Chrome:F12 -> 应用程序 -> 存储 -> Cookies -> 您的网站 -> 清除

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题,生病了或正在重置我的缓存。我认为要么我的 cookie 变得无效,要么 cookie 发生了变化,并且由于某种原因它无法再被解析。

      我在 GitHub 存储库问题中找到了解决方案: https://github.com/TypecastException/AspNet-Identity-2-With-Integer-Keys/issues/2#issuecomment-128280883

      使用以下代码解决了我的问题

      getUserIdCallback: (id) => GrabUserId(id))
      
      public static int GrabUserId(System.Security.Claims.ClaimsIdentity claim)
      {
          if (!int.TryParse(claim.GetUserId(), out int id))
              return 0;
          else
              return id;
      }
      

      返回 0 时,它只是将您注销,因为它无法将您识别为用户。

      【讨论】:

        【解决方案4】:

        我真的不想改变浏览器体验的品味。所以,就我而言,从 Chrome DevTools (F12) > Application > 清除存储 > 清除站点数据修好了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-12
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          相关资源
          最近更新 更多