#c# #asp.net-mvc #entity-framework #asp.net-identity
#c# #asp.net-mvc #entity-framework #asp.net-identity
Вопрос:
Я сделал базовую ASP.Net Веб-проект MVC. Я переключил все свои идентификаторы с string
на int
с помощью документов Microsoft.
Я внес эти изменения в обновлении MVC 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
Спасибо.
Комментарии:
1. Очень сложно определить, в чем может быть ошибка, без фрагментов кода, где это происходит неправильно. Пожалуйста, проясните вопрос
2. Покажите нам строку, в которой возникает ошибка
3. Извините всех, теперь обновлено
4. Это первый код или первый db?
5. кодируйте, что БД не создается, пока я не запущу проект, и я еще ни разу не запускал проект успешно, поэтому ни одна БД еще не является их. это моя система ошибок. Исключение FormatException: ‘Входная строка была не в правильном формате.’
Ответ №1:
Итак, чтобы сформулировать это как ответ на ваш вопрос, Parse
метод использует текущую локаль для преобразования вашей строки в целое число. Я бы предположил, что в вашем случае GetUserID()
будет в формате, который в вашей текущей локали ожидал бы запятую в качестве десятичной точки. Следовательно, предоставление необязательного параметра CultureInfo.InvariantCulture
сделало бы ваш язык нечувствительным к культуре. Альтернативой было бы предоставить второй необязательный параметр для предоставления IFormatProvider.
Чтобы устранить вашу ошибку, установите эту строку как:
(id)=>Int32.Parse(id.GetUserId(),CultureInfo.InvariantCulture)
Для получения дополнительной информации о CultureInfo.Инвариантная культура.
Приветствия.
Комментарии:
1. Моя программа некоторое время работала нормально, и я даже не прикасался к этому, так как я исправил это с вами, теперь внезапно я снова получаю эту ошибку, ту же самую, и я ничего не трогал в этом, я добавил контроллер с новыми представлениями, но они перестали загружаться, потому что эта ошибка снова regenerateIdentityCallback: (manager, user) => user. Генерируйте useridentityasync (manager), получите USERIDCALLBACK:(id) => Int32.Parse(id. GetUserId(), CultureInfo. Инвариантная культура) )
2. @Bigbear Вы преобразуете число в целое число. Итак, если ваше
id.GetUserId()
равно 4.5, например, это приведет к сбою, потому что это не целое число. Поэтому используйтеInt32.TryParse()
в вашем случае, потому чтоInt32.TryParse()
вернет значение, которое сообщит вам, удался синтаксический анализ или нет.3. Как бы я поместил это в свою часть моей программы? getUserIdCallback:(id) => Int32. Попробуйте проанализировать (id. GetUserId(), //CultureInfo.CurrentCulture) CultureInfo. Инвариантная культура)
4. @Bigbear Смотрите этот простой пример для
TryParse
: dotnetfiddle.net/DTnA2H . В вашем коде вам нужно было бы сначала проверить, прошло ли ваше преобразованиеid.GetUserId()
успешно или нет. Основываясь на логическом значении, которое вы получаете с помощью этого метода, вы можете соответствующим образом обрабатывать свои сценарии. Тогда вам даже не нужно будет устанавливать свойid.GetUserId()
, как вы делаете прямо сейчас. Если преобразование прошло успешно, то установите:getUserIdCallback:(id)=>id.GetUserId())
, else//handle if conversion did not succeed
Ответ №2:
Чтобы ответить на мой вопрос.
В моем 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()))
)
}