2009-12-29 26 views
16

Cả hai đều có các thuộc tính Yêu cầu và Phản hồi, nhưng tôi không thể viết một phương thức hoặc là HttpContext hoặc HttpContextBase. Ở một số nơi hoặc là một hoặc khác có sẵn vì vậy tôi cần phải xử lý cả hai. Tôi biết HttpContextWrapper có thể chuyển đổi theo một hướng, nhưng vẫn ... tại sao nó lại như thế này?Tại sao HttpContext không lấy được từ HttpContextBase?

+5

Tôi đến đây để tìm hiểu cách chuyển đổi một 'HttpContextBase' thành' HttpContext'. Câu hỏi của bạn có chứa câu trả lời. Câu trả lời là 'HttpContextWrapper' xuất phát từ' HttpContextBase' và lấy một 'HttpContext' làm tham số cho hàm tạo. Vì vậy, như tên của nó, nó kết thúc một 'HttpContext' và làm cho nó có sẵn như là một đối tượng tương thích' HttpContextBase'. Cảm ơn! –

+0

http://stackoverflow.com/a/4567707/955831 –

Trả lời

23

HttpContext đã có từ .NET 1.0. Vì lý do tương thích ngược, họ không thể thay đổi lớp đó. HttpContextBase đã được giới thiệu trong ASP.NET MVC để cho phép kiểm tra tốt hơn bởi vì nó làm cho nó dễ dàng hơn để thử/stub nó.

0

Đây là một câu hỏi cũ nhưng tôi chỉ có cùng một vấn đề và câu trả lời là trong bình luận của Gunder.

Tạo cho bạn phương pháp sử dụng HttpContectBase và sau đó quấn bối cảnh của bạn trong một HttpContextWrapper khi bạn muốn gọi nó là từ mã của bạn

public class SomeClass{ 
    ... other stuff in your class 
public void MyMethod(HttpContextBase contextbase){ 
    ...all your other code 
    } 
} 

Cách sử dụng

var objSomeClass = new SomeClass(); 
objSomeClass.MyMethod(new HttpContextWrapper(HttpContext.Current)); 

Tôi nghĩ HttpContext.Current sẽ null nếu bạn thực hiện cuộc gọi này qua ajax, Tôi sẽ điều tra cách tải ngữ cảnh và cập nhật bài đăng này.

+0

Tôi nghĩ bạn vẫn nên có một HttpContext ngay cả với các cuộc gọi Ajax – JoelFan

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