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

Tôi đang sử dụng hàm đó để tải nội dung từ các tệp khác nhau, nhưng "page.ProcessRequest (HttpContext.Current)" chèn nội dung vào ngữ cảnh hiện tại và những gì tôi cần là hàm trả về nội dung của tệp được chỉ định.Làm cách nào để tạo một HttpContext mới?

Tôi tự hỏi nếu có cách làm việc để tạo một HttpContext mới, để "page.ProcessRequest" không chèn bất kỳ điều gì vào phản hồi hiện tại.

Trả lời

3

Oded là chính xác như xa như tôi biết. Bạn không thể dễ dàng tạo ra cá thể của riêng bạn của HttpContext. Tuy nhiên bạn vẫn có thể đạt được mục tiêu của bạn thorugh phương tiện khác.

Sử dụng máy chủ.Execute. http://msdn.microsoft.com/en-us/library/ms150027.aspx.

Bạn có thể chỉ định HttpHandler để thực thi cùng với một TextWriter để đổ nội dung vào.

1

Bạn không thể tạo HttpContext mới, không phải không có nhiều công việc xung quanh.

Nó là một trong những thất bại của ASP.NET và BCL - làm cho các ứng dụng web untestable (hoặc ít nhất là rất khó khăn để kiểm tra mà không HttpContext

Tôi không rõ ràng về yêu cầu của bạn what I need is the function to return the content of the specified file -. Bạn có thể xin giải thích chính xác những gì bạn có nghĩa là bằng cách đó?

+0

Tôi muốn tải/xử lý tệp .aspx giữa và lấy html họ trả về, nhưng tôi không muốn thực hiện qua WebRequest: -/Vì vậy, tôi có thể lưu trữ nội dung/html của những thứ đó " các mô-đun "và sử dụng lại chúng mà không cần thực hiện một yêu cầu khác. –

+0

@Carlos - Bạn có muốn sử dụng chúng làm mẫu không? – Oded

1

Check-out Pex/Moles của nó bao gồm một khuôn khổ mocking có thể thử gần như bất kỳ loại hay thành viên, ngay cả khi nó niêm phong hoặc tĩnh. (nó thực hiện điều này bằng cách sử dụng một loạt thử nghiệm tùy chỉnh)

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

     } 
Các vấn đề liên quan