是否可以复制/克隆 Web 请求的 HttpContext

2024-01-03

克隆当前请求的 HttpContext 实例的最简单方法是什么?

我正在开发一个应用程序Asp.net MVC v1。我升级了常规 PartialView 功能,使其实际上具有行为非常相似的子控制器,但具有自己的上下文。当您使用 PartialViews 时,您必须在主视图的控制器操作中填充部分视图的视图数据。我创建了自己的功能,可以从视图内调用控制器操作。这样我得到:

  • 我不必在主视图的控制器操作中提供子视图的数据
  • 子控制器方法可以更封装地操作数据,与其他视图/控制器没有任何关系

问题是每个子控制器请求都使用HttpContext。因此,当我在子控制器中设置一些 HttpContext.Item 时,它实际上会填充实际请求的 HttpContext。

这就是为什么我想克隆 HttpContext。我已经在使用:

HttpContext subContext = new HttpContext(request, response);
// what happened to Session, User, Items etc. properties?

但这除了请求和响应之外没有设置任何其他内容。但我可能还需要其他属性和集合...比如会话、项目、用户...等。


虽然“不可能”的答案是正确的,但还有一种替代方案比将值写入当前上下文然后重写回其原始状态要干净得多。解决方案是完全基于您选择的 URL 创建一个新的 HttpContext 对象。

// A new request/response is constructed to using a new URL.
// The new response is using a StreamWriter with null stream as a backing stream 
// which doesn't consume resources

using (var nullWriter = new StreamWriter(Stream.Null))
{
    var newRequestUri = new Uri("http://www.somewhere.com/some-resource/");
    var newRequest = new HttpRequest("", newRequestUri.ToString(), newRequestUri.Query);

    var newResponse = new HttpResponse(nullWriter);
    var newContext = new HttpContextWrapper(new HttpContext(newRequest, newResponse));

    // Work with the new context here before it is disposed...
} 

参考:https://github.com/maartenba/MvcSiteMapProvider/issues/278#issuecomment-34905271 https://github.com/maartenba/MvcSiteMapProvider/issues/278#issuecomment-34905271

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

是否可以复制/克隆 Web 请求的 HttpContext 的相关文章

随机推荐

  • Git 中的插入和删除是什么?

    当我运行 git 命令时git commit or git log shortstat部分输出如下所示 2 files changed 3 insertions 11 deletions 一个的含义是什么插入 or a deletion 它
  • Maven 为同一个项目生成两个不同的 WAR 文件

    我有一个 Maven Web 服务项目 由两个不同的服务类 testClass1 和 testClass2 组成 我想要为同一项目的两个类创建两个不同的 WAR 文件 目前我正在为这两个服务生成单个 WAR 文件 如何为同一个项目生成两个不
  • 用于 Java 的非阻塞 io Web 服务器/框架

    有谁知道任何用于java的node js风格的网络服务器框架 我意识到 在处理 Web 请求时具有非阻塞回调行为需要 Web 服务器级别的深入支持 我对 Node js 感兴趣 但是当我有一个最终保存数据的 Web 服务器时 我想利用 Ja
  • sed one-liner - 查找关键字周围的分隔符对

    我通常使用大型 XML 文件 并且通常通过以下方式进行字数统计 grep确认某些统计数据 例如 我想确保至少有五个实例widget通过以下方式在单个 xml 文件中 cat test xml grep ic widget 此外 我只是希望能
  • 你能通过地址比较对象是否相等吗?

    我有一个函数可以按每个属性比较对象以查看它们是否相同 但我只是想知道 通过地址比较对象而不是检查它们是否是完全相同的对象会更好吗 编辑 请注意 如果您希望函数正常工作 则不能将值 对象 传递给函数 您需要传递 可能是常量 引用或指针 如果您
  • Android 货币符号排序

    我正在使用非英语语言环境的设备 英语货币的格式如下 1 如果我有英语语言环境 我会得到欧元货币 例如 1 Using format setCurrency Currency getInstance currency return forma
  • 角度 2 生产构建后出现意外标记 <

    在构建我的 Angular 2 应用程序之后ng build prod我复制了dist我的 node js 项目中的文件夹并将基本标签修改为 现在 当我尝试在浏览器中打开时 我收到以下错误 polyfills aa13f03 bundle
  • 导入环境OpenAI Gym出错

    我正在尝试运行 OpenAI Gym 环境 但出现以下错误 import gym env gym make Breakout v0 ERROR Library Frameworks Python framework Versions 3 8
  • 如何检索距离我的范围 0.5 公里以内的帖子?

    我正在保存用户发布的帖子的坐标 我正在生成一个推送 ID 然后使用它来保存帖子数据和 geofire 坐标 我只想显示那些在 0 5 公里半径范围内的帖子 我在用GeoFire库相同 但我无法完成任务 以下是我生成推送 ID 的方法 ite
  • Typescript 实用程序“记录”和“部分”不适用于受约束的泛型

    我需要基于受约束的泛型创建一个新类型 新类型应具有与通用类型相同的键 使它们可选并将它们映射到数字 我的第一个方法是使用Partial
  • 单击蒙版时如何关闭模态窗口 extjs?

    如果我创建一个模式窗口 Ext define myWindow extend Ext Container alias widget myWindow floating true modal true listeners onMaskClic
  • 我可以用 Java 进行低级网络编程吗?

    应用程序级消息以一系列数据包的形式通过网络发送 这些数据包在接收端组装并传递到应用程序级 是否有可能在Java在这些单独的数据包级别上进行网络编程 Or in Java我们只能看到 应用程序 级别的数据包 IE 由所有这些网络数据包组装而成
  • 如何在WPF中使用另一个项目的资源?

    我有一个解决方案 其中有很多 WPF 应用程序和类库项目 我想在其他 WPF 应用程序的 Resources 文件夹下的另一个项目中使用图标 我怎样才能做到这一点 我不想在所有不同的项目中一遍又一遍地复制相同的图像 Use 包 URI 语法
  • 如何从自定义标签的代码(短代码)访问11ty中的页面前端数据?

    在 Eleventy 11ty 中 页面源可以在其 front matter 中定义自定义数据 例如 title this is front matter data Page content myCustomTag valueOfArg1
  • PHP - 除某些单词外,每个单词的第一个字符大写

    我有一批像这样的字符串 tHe iPad hAS gONE ouT of STOCK PoWER uP YOur iPhone wHAT moDEL is YOUR aPPLE iPHOne 我想将每个单词的第一个字符大写 并将其余字符小写
  • C# 中的 Int32 与 Int64 与 Int [重复]

    这个问题在这里已经有答案了 可能的重复 假设32位整数 https stackoverflow com questions 164643 assuming 32bit ints 所以我在 C 中读到 int 等于 int32 在 64 位机
  • TensorFlow 安装错误,未启用 Windows LongPath 支持

    我正在尝试安装 TensorFlow 但不断收到长路径错误 我安装了 Python 3 9 和 pip 21 3 1 每当我运行 pip install tensorflow 时 我都会收到以下错误 错误 由于 OSError 无法安装软件
  • C中当前进程的内存使用情况

    我需要用 C 语言获取当前进程的内存使用情况 有人可以提供如何在 Linux 平台上执行此操作的代码示例吗 我知道cat proc
  • 重新定义Python内置函数

    我正在开发一个 python 程序 作者编写了一个如下所示的函数 def blah str asdf asdf asdf doStuff str 这似乎有效 尽管 str 是内置函数并且不应该用作变量 这里到底发生了什么 我的猜测是 str
  • 是否可以复制/克隆 Web 请求的 HttpContext

    克隆当前请求的 HttpContext 实例的最简单方法是什么 我正在开发一个应用程序Asp net MVC v1 我升级了常规 PartialView 功能 使其实际上具有行为非常相似的子控制器 但具有自己的上下文 当您使用 Partia