2011-08-28 18 views
5
public void getContent() { 
    string VirtualPath = "~/Content.aspx"; 
    var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler; 
    page.ProcessRequest(HttpContext.Current); 
} 

İçeriği farklı dosyalardan yüklemek için bu işlevi kullanıyorum, ancak "page.ProcessRequest (HttpContext.Current)", içeriği geçerli içeriğe ekler ve ihtiyacım olan şey içeriği döndürme işlevidir belirtilen dosyanın.Yeni bir HttpContext nasıl oluşturabilirim?

Yeni bir HttpContext oluşturmak için bir çalışma yolu olup olmadığını merak ediyorum, böylece "page.ProcessRequest" geçerli yanıta herhangi bir şey eklemiyor.

cevap

3

Oded çok doğru bildiğim gibi. HttpContext'in kendi örneğini kolayca oluşturamazsınız. Ancak yine de hedeflerinizi başka yollarla elde edebilirsiniz.

Bir Server.Execute kullanın. http://msdn.microsoft.com/en-us/library/ms150027.aspx.

İçeriği boşaltmak için bir TextWriter ile birlikte yürütmek üzere HttpHandler öğesini belirtebilirsiniz.

1

Çok sayıda iş ortamı olmadan yeni bir HttpContext oluşturamazsınız.

O ASP.NET ve BCL başarısızlıkları biridir - açıklayabilir misiniz -. (Ya da en azından çok zor HttpContext olmadan test etmek

Ben senin ihtiyacına what I need is the function to return the content of the specified file net değilim web uygulamaları test edilemeyen yapar tam olarak bununla ne demek?

+0

Eh i/süreç interal .aspx dosyaları yüklemek ve onlar dönmek html almak istiyorum, ama webRequest aracılığıyla bunu yapmak istemiyorum: - Bunlardan/i içeriği saklayabilir Böylece/html " modülleri "ve başka bir istek yapmadan bunları yeniden kullanın. –

+0

@Carlos - Onları şablon olarak kullanmak istediğiniz anlamına mı geliyor? – Oded

1

onun onun mühürlü veya statik bile hemen hemen her türünü veya üye taklit alaycı bir çerçeve içerir dışarı Pex/Moles kontrol edin. (bir özel test dizi kullanarak gerçekleştirir)

-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; 
      } 

     }