使用ControllerB操作创建子实体时出现“User not found”错误,在controllerA

时间:2016-05-11 13:55:38

标签: asp.net-mvc-5 entity-framework-6 asp.net-identity claims-based-identity

成功创建应用程序用户和以下代码行后(在AccountController中的Register操作中):

await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

我正在尝试添加子对象

var controller=DependencyResolver.Current.GetService<AnotherController>();
                controller.ControllerContext = new ControllerContext(Request.RequestContext, controller);

            var res = controller.Create(
                new ChildEntity
                {
                    ApplicationUserId = user.Id,
                    IsAcative = true
                });

我的create方法看起来像这样

public async Task<ActionResult> Create(ChildEntity entity)
{
    if (ModelState.IsValid)
    {

        db.ChildEntity.Add(entity);
        await db.SaveChangesAsync();
        return RedirectToAction("Index");
    }

    return View(entity);
}

我的对象未创建。返回值res包含错误“user not found”propertyName:“ApplicationUserId”

有人可以帮我理解发生了什么吗? ps:我注意到User.Identity.GetUserId()返回null! (可能是因为其他原因,可能是我的问题与此有关..)

1 个答案:

答案 0 :(得分:2)

首先,在下一次加载页面之前,不会填充用户主体。登录过程仅设置auth cookie。在您从User获取任何内容之前,需要将该cookie发回并且auth机器需要运行(作为请求管道的一部分)。

其次,你在这里做的事情是完全错误的。如果要重用用户创建代码,请将其分解为所有控制器都可以使用的另一个类。尝试在另一个动作中新建一个控制器来调用一个动作是绝对错误的方法。