当区域控制器加载时,为什么我的 BaseController.User 值 == null ? [复制]

2024-03-19

我正在编写一个 Asp.Net 核心应用程序,并且在获得导航访问权限之前让用户通过 Google 进行身份验证。当用户导航到我的“WorldBuilder”区域并点击 WorldController 时,BaseController.User 对象为 null。这是迄今为止我设置的唯一区域/控制器。

用户在登录时有效,因为我可以迭代与用户关联的声明。我使用默认的 Asp.Net core google 身份验证,因此用户只会在登录页面上收到一个按钮,指示他们通过 Google 进行身份验证。

[Authorize]
[Area("WorldBuilder")]
public class WorldController : Controller
{
    private string _userId;
    private IWorldService _worldService;
    private IUserRepository _userRepository;

    public WorldController(IWorldService worldService, IUserRepository userRepository)
    {
        if (User != null) /* The user object is found to be null here. */
        {
            var userIdNameClaim = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
            if (userIdNameClaim != null)
            {
                _userId = userIdNameClaim.Value;
            }
        }
        _userRepository = userRepository;
        _worldService = worldService;
    }

我希望由于这些区域是同一应用程序的一部分,因此经过身份验证的用户信息将在区域之间传递,但情况似乎并非如此。 BaseController.User 对象为 null


您应该只访问User财产(以及其他,例如HttpContext)从您的控制器的操作中。控制器是在执行身份验证和授权之前构建的,因此属性为空。

如果您需要对用户 ID 进行常规访问,您可以在控制器上创建一个属性,您可以在其中从用户对象检索用户 ID,并在操作中使用该属性。您甚至可以将此属性移至基类,并使用该类作为基控制器,以便从每个控制器访问该属性。

例如:

public class ControllerBase : Controller
{
    public string UserId
    {
        get
        {
            if (User != null) /* The user object is found to be null here. */
            {
                var userIdNameClaim = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
                if (userIdNameClaim != null)
                {
                    return userIdNameClaim.Value;
                }
            }

            return null;
        }
    }
}

以及您的特定控制器:

public class WorldController : ControllerBase
{

    // Contructor, etc...

    public IActionResult Get()
    {
       var userId = UserId;

       // Do something with userId (or use UserId directly)
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当区域控制器加载时,为什么我的 BaseController.User 值 == null ? [复制] 的相关文章

  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • 获取尚未实例化的类的函数句柄

    我对 C 相当陌生 我想做的事情可能看起来很复杂 首先 我想获取一些函数的句柄以便稍后执行它们 我知道我可以通过以下方式实现这一目标 List
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 为什么具有相同名称但不同签名的多个继承函数不会被视为重载函数?

    以下代码片段在编译期间产生 对 foo 的调用不明确 错误 我想知道是否有任何方法可以解决此问题而不完全限定对 foo 的调用 include
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • 二叉树中的 BFS

    我正在尝试编写二叉树中广度优先搜索的代码 我已将所有数据存储在队列中 但我不知道如何访问所有节点并消耗它们的所有子节点 这是我的 C 代码 void breadthFirstSearch btree bt queue q if bt NUL
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • 干燥 if 语句

    我有一个 C 程序 在许多不同的 cpp 文件中 我执行如下操作 if thing1 empty thing2 empty if thing1 property lt thing2 property return func1 else if
  • Windows 上 Symfony 5.0.1 控制台中已弃用的类警告

    执行后php bin console make 实体 用户实体 或php bin console make 迁移我在控制台中收到这些警告 2019 12 13T15 49 53 00 00 info User Deprecated The
  • Angular 2 - 组件内的 formControlName

    我想创建一个可以与 FormBuilder API 一起使用的自定义输入组件 我该如何添加formControlName在组件内部 模板
  • 为什么 Lucene QueryParser 需要分析器

    我是 Lucene 的新手 正在尝试将原始字符串解析为Query使用QueryParser 我想知道为什么QueryParser Parse 方法根本需要分析器参数吗 如果分析与查询有关 那么Analyzer处理常规时应指定Query对象以
  • 如何解码字节对象的字符串表示形式?

    我有一个字符串 其中包含编码字节 str1 b Output file xeb xac xb8 xed x95 xad xeb xb6 x84 xec x84 x9d xlsx Created 我想解码它 但我不能 因为它已经变成了一个字符
  • PHP:$var 和 &$var 有什么区别?

    有什么区别 foreach my array as my value And foreach my array as my value 我可以请您举两个现实世界的例子来说明何时使用其中一种以及何时使用另一种吗 第一个示例创建值的副本 而第二
  • 如何在语义保证下使用 React.memo 或 useMemo?

    的文档useMemo says 您可以依赖 useMemo 作为性能优化 而不是作为语义保证 未来 React 可能会选择 忘记 一些 先前记忆的值并在下次渲染时重新计算它们 例如 为屏外组件释放内存 编写你的代码 以便它 没有 useMe
  • 代理 Firebase 函数的跨域状态 cookie 问题

    我使用开发了一个oAuth登录这个例子 https github com firebase functions samples tree master linkedin auth 遇到的第一个问题是如果浏览器中禁用第三方 cookie 现在
  • 如何将 Xml 属性绑定到 Treeview 节点,同时将 XDocument 数据绑定到 WPF Treeview

    我有一个 XML 需要将数据绑定到WPF 树视图 这里 XML 可以有不同的结构 TreeView 应该是数据绑定通用的 足以加载层次结构的任何排列 然而X属性在节点上 称为Title 应该数据绑定到 TreeViewItem 的标题文本
  • 在双屏环境上运行应用程序[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中找到应用程序正在哪个屏幕上运行 https stackoverflow com questions 549751 how do i find what screen the applic
  • 模拟用户脚本中的 Enter 键 tampermonkey [重复]

    这个问题在这里已经有答案了 我正在尝试编写一个用户脚本 在类名 chat input 的输入标记中键入一些内容并按 Enter 键 到目前为止 用户脚本仅键入 Hello 在聊天输入中 但不模拟回车键 知道为什么吗 var msg Hell
  • 将文本和容器置于圆圈内

    我这里有一个 Bootply http www bootply com XLGE6Vpjov http www bootply com XLGE6Vpjov 我需要将 3 个圆圈置于容器中 然后将其中的文本水平和垂直居中 如何使文本垂直居中
  • 获取模型或控制器中消化的 asset_path

    我有一个Article模型 它有一个字段svg path I use fabricjs绘制可以包含多篇文章且可修改的画布 我目前所做的是生成一个json包含文章的所有必需字段 包括svg path 当我尝试使用asset path帮手 ht
  • 如何使用 python boto3 将 s3 对象从一个存储桶复制到另一个存储桶

    我想将文件从一个 s3 存储桶复制到另一个 我收到以下错误 s3 meta client copy 源 目标 类型错误 copy 至少需要 4 个参数 给定 3 个 我无法通过阅读文档找到解决方案 这是我的代码 usr bin env py
  • madvise() 中 MADV_USERFAULT 标志的状态是什么?

    已经有一些讨论在 madvise 中使用新标志来告诉内核不要处理某些内存范围内的页面错误 lwn net 1 https lwn net Articles 615086 lwn net 2 https lwn net Articles 54
  • Google Drive SDK iOS 示例

    我按照Google Drive sdk的iOS示例教程中的步骤进行操作 https developers google com drive ios quickstart https developers google com drive i
  • paxos 与 raft 进行领导者选举

    读完paxos和raft paper后 我有以下困惑 paxos论文仅描述了单个日志条目的共识 相当于raft算法中的领导者选举部分 在raft的leader选举中 paxos的方式相对于简单的随机超时方式有什么优势呢 一个常见的误解是原始
  • 在 Eclipse 控制台中对日志进行着色

    有没有办法在 Eclipse 控制台中对部分日志进行着色 我知道我可以发送到错误和标准流并对它们进行不同的着色 但我更喜欢在 ANSI 转义代码 或任何其他 HTML 行中查找一些内容 我可以在字符串中嵌入颜色以使其在字符串中着色日志 它肯
  • 强制表单文本为小写

    我如何强制 用户名 文本中的文本input无论用户类型如何都小写 div class register div
  • 当区域控制器加载时,为什么我的 BaseController.User 值 == null ? [复制]

    这个问题在这里已经有答案了 我正在编写一个 Asp Net 核心应用程序 并且在获得导航访问权限之前让用户通过 Google 进行身份验证 当用户导航到我的 WorldBuilder 区域并点击 WorldController 时 Base