ASP.Net MVC изменить идентификатор строки по умолчанию на и int с помощью документов, получить ошибку, но - PullRequest
0 голосов
/ 25 марта 2019

Я сделал базовый веб-проект ASP.Net MVC.Я перевел все свои идентификаторы с string на int с документами Microsoft.

https://docs.microsoft.com/en-us/aspnet/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity#run

Я сделал эти изменения + изменения MVC Update 3.Когда я компилирую и запускаю свой новый проект, он показывает как int в моем файле, но я получаю ошибку и не могу завершить работу проекта.

Это то, что мои сообщения отображаются в выводе:

Возникло исключение: «System.FormatException» в mscorlib.dll Исключение типа «System.FormatException» возникло в mscorlib.dll, но не было обработано в коде пользователя. Входная строка была в неправильном формате.

Любой вклад будет оценен.Я выполнил миграцию, и она показывается как int, но не запускается в моем браузере полностью.

app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity = SecurityStampValidator
                    .OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentityCallback: (manager, user) => 
                        user.GenerateUserIdentityAsync(manager), 
                        getUserIdCallback:(id)=>Int32.Parse(id.GetUserId()))
                }
            });

Мой код прерывается в этой части, и это исключение id.GetUserId ()

Это в файле startup.auth.cs

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Таким образом, чтобы ответить на ваш вопрос, метод Parse использует текущую локаль для преобразования вашей строки в целое число.Я предполагаю, что в вашем случае GetUserID() будет в формате, в котором ваша текущая локаль будет ожидать запятую в качестве десятичной точки.Следовательно, задание необязательного параметра CultureInfo.InvariantCulture сделает вашу локаль нечувствительной к культуре.В качестве альтернативы можно указать второй необязательный параметр для предоставления IFormatProvider .

. Чтобы устранить ошибку, установите следующую строку:

(id)=>Int32.Parse(id.GetUserId(),CultureInfo.InvariantCulture)

Для получения дополнительной информации о CultureInfo.InvariantCulture .

Приветствия.

0 голосов
/ 26 марта 2019

Чтобы ответить на мой вопрос.

В моем файле startup.auth.cs

я следовал всем документам Microsoft, как я уже говорил ранее.

Я получал ошибку, когдаЯ запустил свой проект.

Добавление CultureInfo в качестве второго параметра моего ConfigureAuth () в CookieAuth.

Вот мой завершающий код проекта.

                     {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity = SecurityStampValidator
                    .OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>
                    (
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentityCallback: (manager, user) => 
                        user.GenerateUserIdentityAsync(manager), 
                        getUserIdCallback:(id) => Int32.Parse(id.GetUserId(), 
                        CultureInfo.InvariantCulture)
                        //getUserIdCallback:(id) => (Int32.Parse(id.GetUserId()))
                    )
                }
...