OWIN - 对象引用未设置为对象的实例
OWIN - Object reference not set to an instance of object
我正在使用 asp.net mvc 5 开发 Web application.But 我在与用户一起玩时遇到了一些错误 account.I 已经创建了一个用户帐户,我想删除它但是使用 ajax-jquery 时遇到以下问题。
我正在尝试使用 ajax 请求删除用户帐户,但由于 ajax 调用未启动 Owin 上下文,它给出了空对象引用错误。
public class AdmissionsController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AdmissionsController()
{
}
public AdmissionsController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
//function to delete user account
public async Task<object> DeleteUser(string id)
{
ApplicationDbContext context = new ApplicationDbContext();
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await _userManager.FindByIdAsync(id);
var logins = user.Logins;
var rolesForUser = await _userManager.GetRolesAsync(id);
using (var transaction = context.Database.BeginTransaction())
{
foreach (var login in logins.ToList())
{
await _userManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
}
if (rolesForUser.Count() > 0)
{
foreach (var item in rolesForUser.ToList())
{
// item should be the name of the role
var result = await _userManager.RemoveFromRoleAsync(user.Id, item);
}
}
await _userManager.DeleteAsync(user);
transaction.Commit();
}
return new{success=true};
}
}
我的 ajax 调用如下:
var userid = $(this).attr("data-StudentId");
var success = false;
$.ajax({
method: "Get",
url: "/Area/Admissions/DeleteUser",
data: { "id": userid },
success: function (response) {
if (response.Success == true) {
success = true;
}
else if (response.Success == false) {
//window.location.reload();
}
},
error: function (response) {
notificationMSG("fa fa-thumbs-up", "error", "Error", response.message);
}
});
我该如何解决这个问题???
我在以下行收到错误:
var user = await _userManager.FindByIdAsync(id);
这只是一个大胆的猜测,但在我看来你没有实例化 _userManager
。您有一个相应的 属性 发生此创建的地方。但是,在您使用私有字段的错误行中。尝试使用 属性:
var user = await UserManager.FindByIdAsync(id);
这将调用 getter 从 owin 上下文中获取此管理器的地方。
我正在使用 asp.net mvc 5 开发 Web application.But 我在与用户一起玩时遇到了一些错误 account.I 已经创建了一个用户帐户,我想删除它但是使用 ajax-jquery 时遇到以下问题。 我正在尝试使用 ajax 请求删除用户帐户,但由于 ajax 调用未启动 Owin 上下文,它给出了空对象引用错误。
public class AdmissionsController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AdmissionsController()
{
}
public AdmissionsController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
//function to delete user account
public async Task<object> DeleteUser(string id)
{
ApplicationDbContext context = new ApplicationDbContext();
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await _userManager.FindByIdAsync(id);
var logins = user.Logins;
var rolesForUser = await _userManager.GetRolesAsync(id);
using (var transaction = context.Database.BeginTransaction())
{
foreach (var login in logins.ToList())
{
await _userManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
}
if (rolesForUser.Count() > 0)
{
foreach (var item in rolesForUser.ToList())
{
// item should be the name of the role
var result = await _userManager.RemoveFromRoleAsync(user.Id, item);
}
}
await _userManager.DeleteAsync(user);
transaction.Commit();
}
return new{success=true};
}
}
我的 ajax 调用如下:
var userid = $(this).attr("data-StudentId");
var success = false;
$.ajax({
method: "Get",
url: "/Area/Admissions/DeleteUser",
data: { "id": userid },
success: function (response) {
if (response.Success == true) {
success = true;
}
else if (response.Success == false) {
//window.location.reload();
}
},
error: function (response) {
notificationMSG("fa fa-thumbs-up", "error", "Error", response.message);
}
});
我该如何解决这个问题??? 我在以下行收到错误:
var user = await _userManager.FindByIdAsync(id);
这只是一个大胆的猜测,但在我看来你没有实例化 _userManager
。您有一个相应的 属性 发生此创建的地方。但是,在您使用私有字段的错误行中。尝试使用 属性:
var user = await UserManager.FindByIdAsync(id);
这将调用 getter 从 owin 上下文中获取此管理器的地方。