2016-12-04 11 views
0

Для достижения int первичного ключа я следовал этой статье: https://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identityИзменение первичного ключа для пользователей в ASP.NET Идентичность

Он компилирует, но при запуске она дает мне сообщение об ошибке:

Исключение типа 'System.FormatException' произошел в mscorlib.dll, но не был обработан в коде пользователя
Дополнительная информация: Строка ввода не была в правильном формате.

Код:

public void ConfigureAuth(IAppBuilder app) 
    { 
     // Configure the db context, user manager and signin manager to use a single instance per request 
     app.CreatePerOwinContext(ApplicationDbContext.Create); 
     app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
     app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

     // Enable the application to use a cookie to store information for the signed in user 
     // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
     // Configure the sign in cookie 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      Provider = new CookieAuthenticationProvider 
      { 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
       validateInterval: TimeSpan.FromMinutes(30), 
       regenerateIdentityCallback: (manager, user) => 
        user.GenerateUserIdentityAsync(manager), 
================================================================================ 
        getUserIdCallback: (id) => (id.GetUserId<int>() <<===== THIS IS WHERE I GET THE ERROR MESSAGE)) 
================================================================================ 

      } 
     });    
     app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

     // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. 
     app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

     // Enables the application to remember the second login verification factor such as phone or email. 
     // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. 
     // This is similar to the RememberMe option when you log in. 
     app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 

     // Uncomment the following lines to enable logging in with third party login providers 
     //app.UseMicrosoftAccountAuthentication(
     // clientId: "", 
     // clientSecret: ""); 

     //app.UseTwitterAuthentication(
     // consumerKey: "", 
     // consumerSecret: ""); 

     //app.UseFacebookAuthentication(
     // appId: "", 
     // appSecret: ""); 

     //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() 
     //{ 
     // ClientId = "", 
     // ClientSecret = "" 
     //}); 
    } 

Кто-нибудь знает, где проблема?

+0

'Строка ввода не в правильном формате' означает, что переданное строковое значение из идентификатора, вероятно, не является допустимым числом. Вы можете разобрать его на целочисленное значение для PK таблицы, используя 'getUserIdCallback: (id) => (int.Parse (id.GetUserId())). –

+0

Спасибо @TetsuyaYamamoto, это дает мне то же сообщение об ошибке. – dsb

+0

Попробуйте удалить/очистить все файлы cookie, связанные с вашим сайтом/локальным хостом, из хранилища cookie браузера, я сделал это раньше, и все внезапно исправлено. –

ответ

0

Tetsuya Yamamoto является правильным. Проблема заключалась в том, что я взял чистый проект, запустил его и зарегистрировал в качестве пользователя, в то время как основным ключом был GUID. Затем я выполнил все изменения, необходимые для того, чтобы первичный ключ стал целым. Затем, когда я запустил его, файл cookie был отправлен в OnValidateIdentity, и там он потерпел крах, так как основным ключом был GUID. Я очистил весь кеш, и все сработало, как ожидалось.

 Смежные вопросы

  • Нет связанных вопросов^_^