2011-08-28 9 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を作成するにはどうしたらいいですか?

"page.ProcessRequest"が現在のレスポンスに何も挿入しないように、新しいHttpContextを作成する作業方法があるのだろうかと思います。

答えて

3

Odedは現在まで正確です 私の知る限り。独自のHttpContextインスタンスを簡単に作成することはできません。しかし、あなたはまだ他の手段であなたの目標を達成することができます。

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

コンテンツをダンプするために、TextWriterとともに実行するHttpHandlerを指定できます。

1

新しいHttpContextを作成することはできません。回避策はあまりありません。

これは、ASP.NETおよびBCLの欠点の一つである - 。HttpContextない試験に非常に困難なWebアプリケーションをテスト不能(あるいは少なくともなり

私はあなたの条件what I need is the function to return the content of the specified fileに明確ではないです - あなたは説明してくださいすることができますあなたはそれで意味を正確に何を?

+0

はよく私は/プロセスinteral .aspxファイルをロードして、彼らは返すHTMLを取得したいが、私はWebRequestクラスを経由して、それを行うにはしたくない: - それらの/ iのコンテンツを保存できるようにするため/ 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; 
      } 

     } 
関連する問題