.NET Core IHttpContextAccessor 问题

2024-03-02

我有静态助手类

public static class Current
{
    public static string Host
    {
        get { return "httpContextAccessor here"; }
    }
}

如何访问 Host 属性中的当前 HttpContext?


你不能也不应该。这完全违背了依赖注入系统的全部目的。静态类(用于运行时数据或服务定位器)是一种反模式。

在 ASP.NET Core 中你必须注入IHttpContextAccessor在你需要的课堂上。您可以创建一个非静态类并执行以下操作:

public class RequestInformation : IRequestInformation
{
    private readonly HttpContext context;

    public RequestInformation(IHttpContextAccessor contextAccessor) 
    {
        // Don't forget null checks
        this.context = contextAccessor.HttpContext;
    }

    public string Host
    {
        get { return this.context./*Do whatever you need here*/; }
    }
}

并在你的类库中注入它:

public class SomeClassInClassLibrary
{
    private readonly IRequestInformation requestInfo;

    public SomeClassInClassLibrary(IRequestInfomation requestInfo) 
    {
        // Don't forget null checks
        this.requestInfo = requestInfo;

        // access it
        var host = requestInfo.Host;
    }
}

请注意,您的SomeClassInClassLibrary必须通过以下任一方式解决Scoped or Transient模式,它不能是Singleton, 因为HttpContext仅在请求期间有效。

或者如果SomeClassInClassLibrary必须是单例,你必须注入一个工厂并解析IRequestInformation按需(即在动作内)。

最后但并非最不重要的,IHttpContextAccessor默认情况下未注册。

IHttpContextAccessor 可用于访问当前线程的 HttpContext。然而,维持这种状态会带来不小的性能成本,因此它已从默认服务集中删除。

依赖它的开发人员可以根据需要将其添加回来:services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

Source: 默认情况下未注册 IHttpContextAccessor 服务 https://github.com/aspnet/Announcements/issues/190#issue-159298966

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

.NET Core IHttpContextAccessor 问题 的相关文章

  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • simpleXML 根据属性获取节点子节点[重复]

    这个问题在这里已经有答案了 我正在尝试解析我通过其属性之一引用的节点的值 但我不确定语法 XML
  • Netty如何使用线程池?

    您能解释一下 Netty 如何使用线程池来工作吗 我是否理解正确 有两种线程池 老板和工人 Boss 用来做 I O worker 用来调用用户回调 messageReceived 来处理数据 这是来自 NioServerSocketCha
  • 使用什么工具来解析Python中的编程语言?

    您可以推荐哪种 Python 工具来解析编程语言 它应该允许源代码中语言语法的可读表示 并且应该能够扩展到复杂的语言 语法像 Python 本身一样复杂的语言 当我搜索时 我主要找到 pyparsing 我将对其进行评估 但当然我对其他替代
  • 用于单元/集成测试的嵌入式动物园管理员

    是否有嵌入式动物园管理员以便我们可以在单元测试中使用它 它可以与测试一起发货并开箱即用 也许我们可以模拟一些服务并注册到嵌入式动物园管理员 The Curator https github com Netflix curator wiki框
  • Mac 版 Github:缺少拉取请求按钮

    周六 我在 Mac 上安装了 Github Desktop 并尝试了 Github Workflow 创建一个分支 提交更改并执行拉取请求 一切顺利 今天我在工作中安装了 Mac 版 Github 但找不到 Pull Request 按钮
  • Typescript 在 vs 2015 ctp 6 中禁用保存时编译

    我需要知道如何禁用打字稿文件保存时编译 默认情况下启用 Typescript 编译 您可以执行下一步来禁用它 选择并单击 卸载项目 菜单项 选择已卸载的项目并单击 编辑 kproj 将新的 PropertyGroup 节点添加到项目根节点
  • 捆绑链接的 JavaScript 文件

    我正在使用 Visual Studio 2012 和 MVC4 我已将链接文件 来自另一个项目 添加到我的 MVC4 应用程序中 以下是该文件的属性 构建操作 内容 复制到输出目录 不复制 这是我的捆绑包的示例 bundles Add ne
  • WPF DataGrid AlternatingRowBackground 和 RowStyle 优先级

    我该如何做我的RowStyle后申请AlternatingRowBackground 我想要物品 有IsOrange as true具有Orange背景 无论交替的行背景如何 目前情况并非如此 XAML
  • 当选择文本时,如何用我自己的视图替换 UIMenuController?

    当选择文本时 默认情况下会弹出一个 UIMenuController 其中包含剪切 复制 粘贴等功能 我想用我自己的自定义视图替换它 外观相似 但高两倍 以便我可以有两行按钮 自定义视图 我怎样才能做到这一点 我知道没有简单的方法 我预计即
  • Mongodb动态like运算符

    在 mongodb 中相当于 sql like 运算符是 db users find shows m 使用 nodejs javascript 我想根据 url 参数动态更改字母 我努力了 letter req params letter
  • RxJava Observable.fromEmitter 奇怪的背压行为

    我一直在利用Observable fromEmitter 作为一个绝佳的替代品Observable create 我最近遇到了一些奇怪的行为 但我不太明白为什么会出现这种情况 我真的很感谢对背压和调度程序有一定了解的人来看看这个 publi
  • WebClient.DownloadString 速度慢?

    我正在开发一个使用 ASP Net 3 5 运行的 Web 应用程序 在应用程序的某个地方 我正在调用外部系统 此调用包括从特定 url 下载字符串 string targetUrl BuildMyUrl WebClient wc new
  • str(列表) 是如何工作的?

    为什么str list 返回我们如何在控制台上看到列表 如何str list 工作 任何对 CPython 代码的引用str list gt gt gt x abc def ghi gt gt gt str x abc def ghi 要从
  • 通过 C/C++ 程序使 LED 闪烁的步骤?

    通过 C C 程序制作带有 LED 闪光灯的小电路的最简单步骤是什么 我希望所需的依赖项和包数量最少 我应该将某些东西连接到哪个端口 我会使用哪个编译器 如何将数据发送到该端口 我需要微处理器吗 如果不是 我不想在这个简单的项目中使用它 编
  • 在 Jenkinsfile 中设置 SonarQube Webhook

    我正在尝试创建一个 Jenkins 多分支管道 在每次推送到 bitbucket 时 都会对项目的该分支执行 SonarQube 分析 Jenkins 正确地为每个分支创建新作业 并在 SonarQube 中创建一个新项目 并将分支名称附加
  • 表面和纹理之间的差异(SDL/一般)

    谁能用简单的语言向我解释一下纹理和表面有什么区别 我看到它用在SDL2 as SDL Surface and SDL Texture SDL Texture是从创建的SDL Surface它又是从图像 位图创建的 两者都是像素的集合 但我没
  • 静态 uint8_t 数组的输入过程和类型

    我目前正在尝试将 Arduino IDE 中的整数变量转换为静态 uint8 t 数组的值 我在用 include
  • .NET 如何定位我正在“使用”的命名空间的 dll?

    NET如何定位我所在命名空间的dllusing 是的 我们确实提到了 referene c program files 中的路径 但是在构建和部署之后以及当软件安装在某些用户的计算机上时 它可能与我 开发人员 提到的路径不同 我的意思是它可
  • 如何删除 Rails 中的索引

    我发现我的架构中有两个 survey id 列 这给我带来了一些问题 具体来说 我需要删除第二个索引 因为我不希望 Survey id 是唯一的 add index completions survey id name index comp
  • .NET Core IHttpContextAccessor 问题

    我有静态助手类 public static class Current public static string Host get return httpContextAccessor here 如何访问 Host 属性中的当前 HttpC