C# Net MVC使用docs get error tho将默认字符串ID更改为和int
我做了一个基本的ASP.NETMVCWeb项目。 我使用Microsoft文档将所有ID从C# Net MVC使用docs get error tho将默认字符串ID更改为和int,c#,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Asp.net Identity,我做了一个基本的ASP.NETMVCWeb项目。 我使用Microsoft文档将所有ID从string切换为int 我做了这些更改+MVC更新3更改。 当我编译并运行我的新项目时,它在我的文件中显示为int,但我收到一个错误,无法完成项目的运行 这是我的消息在输出中显示的内容: 引发异常:mscorlib.dll中的“System.FormatException” mscorlib.dll中发生“System.FormatException”类型的异常,但未在用户代码中处理 输入字符串的格式不
string
切换为int
我做了这些更改+MVC更新3更改。
当我编译并运行我的新项目时,它在我的文件中显示为int
,但我收到一个错误,无法完成项目的运行
这是我的消息在输出中显示的内容:
引发异常:mscorlib.dll中的“System.FormatException”
mscorlib.dll中发生“System.FormatException”类型的异常,但未在用户代码中处理
输入字符串的格式不正确
如有任何意见,将不胜感激。我确实运行了迁移,它显示为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()))
}
});
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Account/Login”),
Provider=新CookieAuthenticationProvider
{
//允许应用程序在用户登录时验证安全戳。
//这是一种安全功能,在您更改密码或向帐户添加外部登录时使用。
OnValidateIdentity=SecurityStampValidator
.OnValidateId实体(
validateInterval:TimeSpan.FromMinutes(30),
regenerateIdentityCallback:(管理者,用户)=>
user.GenerateUserIdentityAsync(管理器),
getUserIdCallback:(id)=>Int32.Parse(id.GetUserId())
}
});
我的代码在此部分中断,这是例外
id.GetUserId()
这在startup.auth.cs中
谢谢。回答我的问题
在我的startup.auth.cs中
正如我前面所说,我遵循了所有的微软文档
当我运行我的项目时,我总是遇到一个错误
添加CultureInfo作为CookieAuth下my ConfigureAuth()的第二个参数
这是我完成项目的代码
{
// 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()))
)
}
{
//允许应用程序在用户登录时验证安全戳。
//这是一种安全功能,在您更改密码或向帐户添加外部登录时使用。
OnValidateIdentity=SecurityStampValidator
.OnValidateId实体
(
validateInterval:TimeSpan.FromMinutes(30),
regenerateIdentityCallback:(管理者,用户)=>
user.GenerateUserIdentityAsync(管理器),
getUserIdCallback:(id)=>Int32.Parse(id.GetUserId(),
CultureInfo.InvariantCulture)
//getUserIdCallback:(id)=>(Int32.Parse(id.GetUserId())
)
}
因此,为了回答您的问题,Parse
方法使用当前区域设置将字符串转换为整数。我猜在您的例子中,GetUserID()
的格式应该是您当前的语言环境所期望的逗号作为小数点。因此,提供可选参数CultureInfo.InvariantCulture
将使您的区域设置不敏感。另一种方法是提供第二个可选参数来提供一个
要解决错误,请将此行设置为:
(id)=>Int32.Parse(id.GetUserId(),CultureInfo.InvariantCulture)
有关的详细信息
干杯。如果没有一些代码,很难确定错误可能是什么。请明确问题,告诉我们错误发生的位置对不起,各位,现在是先更新这个代码还是先更新数据库?代码直到我运行这个项目,数据库才被创建,而且我从来没有成功运行过这个项目,所以没有数据库是他们的。这是我的错误System.FormatException:'输入字符串的格式不正确。'我的程序运行了一段时间很好,我甚至从来没有碰过它,因为我现在和你一起修复了它。突然,我又遇到了同样的错误,我从来没有碰过任何东西。我添加了一个具有新视图的控制器,但它们停止加载,因为再次出现错误regenerateIdentityCallback:(管理器,用户)=>user.GenerateUserIdentityAsync(管理器),getUserIdCallback:(id)=>Int32.Parse(id.GetUserId(),CultureInfo.InvariantCulture))@Bigbear您正在将数字转换为整数。例如,如果您的
id.GetUserId()
为4.5,则会失败,因为它不是整数。因此,在您的情况下使用Int32.TryParse()
,因为Int32.TryParse()
将返回一个值,该值将告诉您解析是否成功。我如何将其放在程序的我部分中?getUserIdCallback:(id)=>Int32.TryParse(id.GetUserId(),//CultureInfo.CurrentCulture)CultureInfo.InvariantCulture)@Bigbear有关TryParse
:,请参阅此简单示例。在代码中,您需要首先检查id.GetUserId()
的转换是否成功。基于从该方法获得的布尔值,您可以适当地处理场景。然后,您甚至不需要像现在这样设置id.GetUserId()
。如果转换成功,则设置:getUserIdCallback:(id)=>id.GetUserId())
,否则//处理转换未成功的情况