C# ASP.NET标识更新同步返回';对象未设置为对象的实例';从visual studio 2015转换到2017年后
我的ASP.NET标识更新同步停止工作,代码没有任何更改。我曾与Visual studio 2015合作过这个项目,但最近搬到了2017年。我还将可视化的IIS express更改为完整的IIS。在更新用户数据时,除了updateAsync之外,其他一切都可以正常工作 当我调用用户管理器时,它抛出一个无声错误“Object not set to a instance of a Object”。令人困惑的是,同一个用户管理器用于创建新用户、获取用户集合等。只有UpdateSync失败。我只想弄清楚是什么导致了这种行为:C# ASP.NET标识更新同步返回';对象未设置为对象的实例';从visual studio 2015转换到2017年后,c#,asp.net-mvc,visual-studio,asp.net-web-api,asp.net-identity,C#,Asp.net Mvc,Visual Studio,Asp.net Web Api,Asp.net Identity,我的ASP.NET标识更新同步停止工作,代码没有任何更改。我曾与Visual studio 2015合作过这个项目,但最近搬到了2017年。我还将可视化的IIS express更改为完整的IIS。在更新用户数据时,除了updateAsync之外,其他一切都可以正常工作 当我调用用户管理器时,它抛出一个无声错误“Object not set to a instance of a Object”。令人困惑的是,同一个用户管理器用于创建新用户、获取用户集合等。只有UpdateSync失败。我只想弄清楚
public class AppUser : IdentityUser<int, AppUserLogin, AppUserRole, AppUserClaim>, IUser<int>
{
[Index("EmployeeNumberIndex",IsUnique = true)]
public int EmployeeNumber { set; get; }
public virtual string FirstName { set; get; }
public virtual string MiddleName { set; get; }
public virtual string LastName { set; get; }
public virtual string Sex { set; get; }
public virtual DateTime DateOfBirth { set; get; }
public virtual int UserType { set; get; } // 0 for normall memebers and 1 for admin
public virtual DateTime DateJoined { set; get; }
public virtual string ProfileImage { set; get; }
public virtual string DepartmentName { set; get; }
public virtual string Jobdescription { set; get; }
public virtual string Password { set; get; }
public virtual int PasswordChanged { set; get; }
// guarantors details
public virtual string Guarantor1FullName { set; get; }
public virtual string Guarantor1Address { set; get; }
public virtual string Guarantor1PhoneNumber { set; get; }
public virtual string Guarantor1Email { set; get; }
public virtual string Guarantor2FullName { set; get; }
public virtual string Guarantor2Address { set; get; }
public virtual string Guarantor2PhoneNumber { set; get; }
public virtual string Guarantor2Email { set; get; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(AppUserManager manager, string authenticationType)
{
var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
// Add custom user claims here
return userIdentity;
}
}
公共类AppUser:IdentityUser,IUser
{
[索引(“EmployeeNumber索引”,IsUnique=true)]
public int EmployeeNumber{set;get;}
公共虚拟字符串FirstName{set;get;}
公共虚拟字符串MiddleName{set;get;}
公共虚拟字符串LastName{set;get;}
公共虚拟字符串Sex{set;get;}
公共虚拟日期时间出生日期{set;get;}
公共虚拟int用户类型{set;get;}//0表示普通成员,1表示管理员
公共虚拟日期时间日期联接{set;get;}
公共虚拟字符串配置文件映像{set;get;}
公共虚拟字符串DepartmentName{set;get;}
公共虚拟字符串Jobdescription{set;get;}
公共虚拟字符串密码{set;get;}
公共虚拟整数密码已更改{set;get;}
//担保人详情
公共虚拟字符串Guarantor1FullName{set;get;}
公共虚拟字符串guarantor1地址{set;get;}
公共虚拟字符串Guarantor1PhoneNumber{set;get;}
公共虚拟字符串guarantor1电子邮件{set;get;}
公共虚拟字符串Guarantor2FullName{set;get;}
公共虚拟字符串Guarantor2Address{set;get;}
公共虚拟字符串Guarantor2PhoneNumber{set;get;}
公共虚拟字符串Guarantor2Email{set;get;}
公共异步任务GenerateUserIdentityAsync(AppUserManager管理器,字符串身份验证类型)
{
var userIdentity=wait manager.CreateIdentityAsync(这是authenticationType);
//在此处添加自定义用户声明
返回用户身份;
}
}
这是调用updateAsync的方法
public async Task<IdentityResult> UpdateUser(AppUser user)
{
AppUser usr;
usr = await UserManager().FindByIdAsync(user.Id);
if (usr == null)
{
return new IdentityResult("Member does not exist!");
}
usr.EmployeeNumber = user.EmployeeNumber;
usr.FirstName = user.FirstName;
usr.LastName = user.LastName;
usr.MiddleName = user.MiddleName;
usr.PhoneNumber = user.PhoneNumber;
usr.Email = user.Email;
usr.UserName = user.Email;
usr.ProfileImage = user.ProfileImage;
usr.Jobdescription = user.Jobdescription;
if (user.DateJoined != DateTime.MinValue)
{
usr.DateJoined = user.DateJoined;
}
if (user.DateOfBirth != DateTime.MinValue)
{
usr.DateOfBirth = user.DateOfBirth;
}
if (user.Sex != null)
{
usr.Sex = user.Sex;
}
usr.Guarantor1Address = user.Guarantor1Address;
usr.Guarantor1Email = user.Guarantor1Email;
usr.Guarantor1FullName = user.Guarantor1FullName;
usr.Guarantor1PhoneNumber = user.Guarantor2PhoneNumber;
usr.Guarantor2Address = user.Guarantor2Address;
usr.Guarantor2Email = user.Guarantor2Email;
usr.Guarantor2FullName = user.Guarantor2FullName;
usr.Guarantor2PhoneNumber = user.Guarantor2PhoneNumber;
try
{
return await UserManager().UpdateAsync(usr);
}catch(Exception ex)
{
throw ex;
}
}
public async Task UpdateUser(AppUser)
{
应用程序用户usr;
usr=await UserManager().FindByIdAsync(user.Id);
如果(usr==null)
{
返回新的IdentityResult(“成员不存在!”);
}
usr.EmployeeNumber=user.EmployeeNumber;
usr.FirstName=user.FirstName;
usr.LastName=user.LastName;
usr.MiddleName=user.MiddleName;
usr.PhoneNumber=user.PhoneNumber;
usr.Email=user.Email;
usr.UserName=user.Email;
usr.ProfileImage=user.ProfileImage;
usr.Jobdescription=用户.Jobdescription;
if(user.DateJoined!=DateTime.MinValue)
{
usr.DateJoined=user.DateJoined;
}
if(user.DateOfBirth!=DateTime.MinValue)
{
usr.DateOfBirth=user.DateOfBirth;
}
if(user.Sex!=null)
{
usr.Sex=user.Sex;
}
usr.guarantor1地址=user.guarantor1地址;
usr.guarantor1电子邮件=user.guarantor1电子邮件;
usr.Guarantor1FullName=user.Guarantor1FullName;
usr.guarantor1电话号码=user.guarantor2电话号码;
usr.guarantor2地址=user.guarantor2地址;
usr.Guarantor2Email=user.Guarantor2Email;
usr.Guarantor2FullName=user.Guarantor2FullName;
usr.Guarantor2PhoneNumber=user.Guarantor2PhoneNumber;
尝试
{
返回wait UserManager().UpdateAsync(usr);
}捕获(例外情况除外)
{
掷骰子;
}
}
这是无内部异常而失败的行:
返回wait UserManager().UpdateAsync(usr)
这是用户管理器
public AppUserManager UserManager()
{
return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();
}
公共AppUserManager用户管理器()
{
返回HttpContext.Current.GetOwinContext().GetUserManager();
}
这是appUserManager:
public class AppUserManager : UserManager<AppUser, int>
{
public AppUserManager(IUserStore<AppUser, int> store)
: base(store)
{
}
public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{
AppIdentityDbContext db = context.Get<AppIdentityDbContext>();
AppUserManager manager = new AppUserManager(new AppUserStore(db));
// add password validations
manager.PasswordValidator = new CustomPasswordValidator()
{
RequiredLength = 8,
RequireNonLetterOrDigit = true,
RequireUppercase = true,
RequireDigit = true,
RequireLowercase=true
};
manager.UserValidator = new UserValidator<AppUser, int>(manager)
{
RequireUniqueEmail = true,
};
var provider = new DpapiDataProtectionProvider("http://coopone.local");
manager.UserTokenProvider =
new DataProtectorTokenProvider<AppUser, int>(provider.Create("Email Reset"));
;
return manager;
}
}
公共类AppUserManager:UserManager
{
公共AppUserManager(IUserStore存储)
:基地(商店)
{
}
公共静态AppUserManager创建(IdentityFactoryOptions选项,IOwinContext上下文)
{
AppIdentityDbContext db=context.Get();
AppUserManager=new AppUserManager(new AppUserStore(db));
//添加密码验证
manager.PasswordValidator=新的CustomPasswordValidator()
{
所需长度=8,
RequiredOnletterDigit=真,
RequireUppercase=true,
RequireDigit=true,
RequireLowercase=true
};
manager.UserValidator=新的UserValidator(管理器)
{
RequireUniqueEmail=true,
};
var provider=新的DpapiDataProtectionProvider(“http://coopone.local");
manager.UserTokenProvider=
新的DataProtectorTokenProvider(provider.Create(“电子邮件重置”);
;
退货经理;
}
}
正如您所说,您已部署到IIS,可能您的运行时环境有问题,请查看此信息,谢谢,@Tewr。这个链接很有帮助。HttpRuntime没有指向任何targetFramework,因此async
和await
具有意外行为。在升级到Visual studio 2017后,此功能丢失。我将
更新为
,现在可以使用了。