Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Net MVC使用docs get error tho将默认字符串ID更改为和int_C#_Asp.net Mvc_Entity Framework_Asp.net Identity - Fatal编程技术网

C# Net MVC使用docs get error tho将默认字符串ID更改为和int

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”类型的异常,但未在用户代码中处理 输入字符串的格式不

我做了一个基本的ASP.NETMVCWeb项目。 我使用Microsoft文档将所有ID从
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())
,否则
//处理转换未成功的情况