【问题标题】:How can I create a new HttpContext?如何创建一个新的 HttpContext?
【发布时间】:2011-08-28 19:07:09
【问题描述】:
public void getContent() {
    string VirtualPath = "~/Content.aspx";
    var page = BuildManager.CreateInstanceFromVirtualPath( VirtualPath, typeof( Page ) ) as IHttpHandler;
    page.ProcessRequest( HttpContext.Current );
}

我正在使用该函数从不同文件中加载内容,但是“page.ProcessRequest(HttpContext.Current)”将内容插入到当前上下文中,而我需要的是返回内容的函数指定文件。

我想知道是否有一种工作方法可以创建一个新的 HttpContext,这样“page.ProcessRequest”就不会在当前响应中插入任何内容。

【问题讨论】:

    标签: c# .net asp.net httpcontext


    【解决方案1】:

    据我所知,Oded 是正确的。您无法轻松创建自己的 HttpContext 实例。但是,您仍然可以通过其他方式实现您的目标。

    使用 Server.Execute。 http://msdn.microsoft.com/en-us/library/ms150027.aspx.

    您可以指定要执行的 HttpHandler 以及将内容转储到的 TextWriter。

    【讨论】:

      【解决方案2】:

      你不能创建一个新的HttpContext,除非有很多变通办法。

      这是 ASP.NET 和 BCL 的失败之一 - 使 Web 应用程序无法测试(或者至少在没有 HttpContext 的情况下很难测试。

      我不清楚你的要求what I need is the function to return the content of the specified file - 你能解释一下你的意思吗?

      【讨论】:

      • 好吧,我想加载/处理内部 .aspx 文件并获取它们返回的 html,但我不想通过 WebRequest 进行:-/ 这样我就可以存储的内容/html那些“模块”并重新使用它们而不做另一个请求。
      • @Carlos - 您的意思是要将它们用作模板吗?
      【解决方案3】:

      查看Pex/Moles,它包含一个模拟框架,可以模拟几乎任何类型或成员,即使它是密封的或静态的。 (它通过使用自定义测试主机来做到这一点)

      【讨论】:

        猜你喜欢
        • 2012-02-03
        • 2015-06-19
        • 2017-03-10
        • 2018-05-23
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多