2011-08-28 81 views
5
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?

我不知道是否有創建一個新的HttpContext工作方式,讓「page.ProcessRequest」不插入任何物件電流響應。

回答

3

Oded到目前爲止是正確的 我所知。你不能輕易地創建自己的HttpContext實例。但是,你仍然可以通過其他方式實現你的目標。

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

您可以指定的HttpHandler與一個TextWriter一起執行轉儲內容之中。

1

您不能創建一個新的HttpContext,沒有很多變通的。

這是ASP.NET和BCL的弱點之一 - 使得Web應用程序無法驗證的(或至少很難測試而不HttpContext

我不是對你的要求what I need is the function to return the content of the specified file明確 - 可以請你解釋正是你的意思?

+0

嗯,我想加載/過程INTERAL .aspx文件,並得到它們返回的HTML,但我不希望通過WebRequest的做到這一點: - /讓我可以存儲內容/那些HTML「模塊「並重新使用它們而不做另一個請求。 –

+0

@Carlos - 你的意思是你想使用它們作爲模板? – Oded

1

退房Pex/Moles其包括嘲弄的框架,可以模擬幾乎任何類型或成員,即使它的密封或靜態的。 (它通過使用自定義測試主機做到這一點)

-1
public class HttpContextManager 
     { 
      private static HttpContextBase _context; 
      public static HttpContextBase Current 
      { 
       get 
       { 
        if (_context != null) 
         return _context; 

        if (HttpContext.Current == null) 
         throw new InvalidOperationException("HttpContext not available"); 

        return new HttpContextWrapper(HttpContext.Current); 
       } 
      } 

      public static void SetCurrentContext(HttpContextBase context) 
      { 
       _context = context; 
      } 

     }