gpt4 book ai didi

c# - 为什么我的抽象基 Controller 中的 User(如 User.Identity.Name)为 null?

转载 作者:IT王子 更新时间:2023-10-29 04:23:00 25 4
gpt4 key购买 nike

我在问一个相关的问题,但把标题弄乱了,没人能理解。由于我现在可以更准确地提出问题,因此我决定将其重新表述为一个新问题并关闭旧问题。对此感到抱歉。

所以我想做的是将数据(存储在数据库中的自定义用户昵称)传递给 LoginUserControl。此登录通过 Html.RenderPartial() 从母版页呈现,所以我真正需要做的是确保在每次调用时都显示 ViewData["UserNickname"]。但是我不想在每个 Controller 的每个 Action 中填充 ViewData["UserNickname"],所以我决定使用 this approach并创建一个抽象基础 Controller 来为我完成工作,如下所示:

public abstract class ApplicationController : Controller
{
private IUserRepository _repUser;

public ApplicationController()
{
_repUser = RepositoryFactory.getUserRepository();
var loggedInUser = _repUser.FindById(User.Identity.Name); //Problem!
ViewData["LoggedInUser"] = loggedInUser;
}
}

这样,无论我的派生 Controller 做什么,用户信息都已经存在。

到目前为止,还不错。现在的问题:

我不能调用 User.Identity.Name 因为 User 已经是 null。在我的所有派生 Controller 中都不是这种情况,因此这是特定于抽象基 Controller 的。

我在代码的另一个地方通过 FormsAuthentication 设置 User.Identity.Name,但我认为这不是问题所在 - afaik User.Identity.Name 可以为 null,但不能为 User 本身。

在我看来,HttpContext 不可用(因为它也是 null ;-),而且我在这里遗漏了一个简单但重要的点。谁能给我一些提示?我真的很感激。

最佳答案

这个问题的答案其实很简单。由于 Raimond 指出的原因,我无法从构造函数内部执行代码,但我可以在构造函数外部执行。

所以我所做的是在基 Controller 类中重写 onActionExecuting()(我为其创建了一个自定义属性,但只是重写该方法也应该有效),然后从那里进行我的用户查找。

现在它按预期工作,我没有重复代码。

关于c# - 为什么我的抽象基 Controller 中的 User(如 User.Identity.Name)为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/430704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com