C# dotnet core 2 将数据从中间件/过滤器传递到控制器方法

2023-11-23

目前我们正在使用 dotnet core 2 编写一个 Web 应用程序。

我们实际上创建了某种多托管平台,可以根据传递到应用程序的 URL 注册新客户端。

然而目前我们想要创建一个中间件/过滤器来验证我们的客户端。

实际上我们想要做的是从数据库中提取一个对象并检查它是否存在,如果存在,我们想要调用控制器方法并使该对象可访问,如果不存在,我们实际上想要中止并显示错误页。

我们已经做的是创建一个过滤器/中间件来完成这个任务,但是我们无法找到一种方法来访问我们已经在控制器方法内的过滤器/中间件中提取的对象。

实际上有任何文档可以做到这一点吗?

我实际上试图从以下方面弄清楚:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware?tabs=aspnetcore2x https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/filters

但他们没有描述一种方法,只是在操作之前/之后实际做一些事情。


您可以使用以下方法将对象添加到上下文中HttpContext.Items文档指出:

Items 集合是存储仅在处理一个特定请求时所需的数据的好位置。每次请求后都会丢弃集合的内容。 Items 集合最适合用作组件或中间件在请求期间的不同时间点运行且没有直接传递参数的方式时进行通信的方式。

例如,在您的中间件中:

public class MySuperAmazingMiddleware
{
    private readonly RequestDelegate _next;

    public MySuperAmazingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext context)
    {
        var mySuperAmazingObject = GetSuperAmazingObject();

        context.Items.Add("SuperAmazingObject", mySuperAmazingObject );

        // Call the next delegate/middleware in the pipeline
        return this._next(context);
    }
}

然后稍后在您的操作方法中,您可以读取该值:

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

C# dotnet core 2 将数据从中间件/过滤器传递到控制器方法 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • CosmosDB 按值将结果排序到数组中

    我有一些如下所示的 CosmosDB 文档 ProductId 1 Status true Code 123456 IsRecall false ScanLog Location type Point coordinates 13 5957
  • 无法打开登录请求的数据库。登录失败。用户登录失败

    我从我的一台计算机复制了一个数据库并在这里使用它 在尝试打开需要从数据库获取内容的页面时 在 con open 上我收到此异常 无法打开物理文件 E Program Files Microsoft SQL Server MSSQL10 SQ
  • ImportError:DLL 加载失败:动态链接库 (DLL) 初始化例程失败

    我在 Conda 环境中使用 CUDA Toolkit v9 0 和 cuDNNv7 1 以及 Python 3 6 安装了具有 CPU 支持的 TensorFlow 我按照 TensorFlow 网站中描述的说明进行操作 当我尝试时 im
  • 使用异步 chrome.storage 时如何重构全局变量?

    要在迁移到 MV2 事件页面或 MV3 Service Worker 时删除持久 MV2 后台脚本中使用的全局变量 我找到的所有指南都只给出了一个示例 用几行设置替换单个全局变量 然后开始使用chrome storage 但我仍然不清楚如何
  • 使用fragmentStatePagerAdapter更新viewpager中的片段/视图

    需要一些帮助来解决我在使用 viewpager 时更新页面的问题 我正在使用带有 FragmentStatePagerAdapter 的简单视图分页器 我想要做的就是访问当前片段 视图 以便我可以更新片段 视图中的一些文本视图 我在论坛里搜
  • 将 Interlocked.CompareExchange 与类一起使用

    System Threading Interlocked CompareExchange运算符提供比较和交换操作的原子 因此线程安全 C 实现 例如int i 5 Interlocked CompareExchange ref i 10 5
  • 当期望服务器端一次性响应时,长轮询与 websocket

    我读过很多关于实时推送通知的文章 总结一下 只要您不关心 100 的浏览器兼容性 websocket 通常是首选技术 但是 一篇文章指出 长轮询 可能当您与以下对象交换单个呼叫时 服务器 服务器正在后台做一些工作 这正是我的情况 用户按下一
  • 运算符的递归应用->

    据说箭头运算符是递归应用的 但是当我尝试执行以下代码时 它在应该打印 4 的情况下却打印出乱码 class dummy public int p int operator gt return 4 class screen public du
  • HAML:仅当条件为真时才创建容器/包装元素

    远景 但我想知道是否有什么办法可以做到这样的事情 p ONLY SHOW THIS IF LOCAL VARIABLE show paras IS TRUE name 换句话说 它总是显示内部的内容 但如果 某些条件 为真 它只会在其周围包
  • 如何以表格格式将对象列表打印到文件

    我必须将对象列表打印到表格格式的文本文件中 例如 如果我有 Person 具有 getName getAge 和 getAddress 方法 对象列表 则文本文件应如下所示 Name Age Address Abc 20 some addr
  • 处理器指令周期执行时间

    我的猜测是 no operation 内在 ARM 指令应花费 1 168 MHz 来执行 前提是每个NOP在一个时钟周期内执行 我想通过文档验证这一点 有关处理器指令周期执行时间的信息是否有标准位置 我试图确定 STM32f407IGh6
  • 按轴分数定位文本

    有没有办法通过轴的分数在图中定位文本 我希望所有绘图的文本都位于相同位置 无论 x 和 y 的范围如何不同 此功能位于 ax annotate 中 但我需要放入额外的 xy 参数 这使得我的代码更难阅读 import matplotlib
  • 我可以从 Qt 程序(在嵌入式 Linux 上)使用什么 EXIF 库?

    有人可以推荐一个可以与 Qt 程序一起使用的 tiff img 的不错的 exif 库吗 我想读取和写入 exif 数据 请注意 我需要一个与闭源程序兼容的许可证 因此 使用 LGPL 或 BSD 风格许可证的库会非常好 我的第一个计划是使
  • 通过 Python 请求模块发出 HTTP 请求无法通过代理工作,而curl却可以工作?为什么?

    使用这个curl命令我能够从Bash获得我正在寻找的响应 curl v u z secret key proxy http proxy net 80 H Content Type application json https service
  • 拖/放 UI 元素时 Android Studio 挂起

    我安装了 Android Studio 1 0 并拥有 JDK 1 8 我创建新项目 使用 带片段的空白活动 并将最低版本设置为棒棒糖 5 0 然后我转到fragment main xml并将一个UI元素拖到手机上 在示例中我使用了一个按钮
  • Angular 5 中的 RequestOptions 已弃用符号错误

    我正在尝试将 Angular 4 中的代码调整为 Angular 5 我做了很多更改 但有一个错误RequestOptions 该代码是关于身份验证的 这就是我遇到错误的地方 import Injectable from angular c
  • 使用反应钩子从父组件触发子函数

    我在父组件中有一些操作按钮 单击此类按钮之一时 我想触发子组件中的一个功能 目前 我正在尝试使用 useRef 钩子来实现它 但该解决方案似乎很乏味 并且还给了我警告 我当前的代码如下所示 import React useContext u
  • iostream线程安全,cout和cerr必须单独加锁吗?

    我知道 为了避免输出混合 多个线程对 cout 和 cerr 的访问必须同步 在同时使用 cout 和 cerr 的程序中 单独锁定它们是否足够 或者同时写入 cout 和 cerr 仍然不安全 编辑澄清 我知道 cout 和 cerr 在
  • Django 抽象模型与常规继承

    除了语法之外 使用 django 抽象模型和使用 django 模型的普通 Python 继承有什么区别 优点和缺点 更新 我认为我的问题被误解了 我收到了关于抽象模型和继承自 django db models Model 的类之间差异的回
  • C# dotnet core 2 将数据从中间件/过滤器传递到控制器方法

    目前我们正在使用 dotnet core 2 编写一个 Web 应用程序 我们实际上创建了某种多托管平台 可以根据传递到应用程序的 URL 注册新客户端 然而目前我们想要创建一个中间件 过滤器来验证我们的客户端 实际上我们想要做的是从数据库