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?
Trả lời
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ó.
Đâ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.
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
- 1. Tại sao tôi không thể lấy được từ lâu?
- 2. Mocking HttpContextBase với Moq
- 3. Tại sao HttpContext không chứa tiêu đề "Máy chủ"?
- 4. Tôi có thể lấy bộ điều khiển thực hiện hiện tại từ HttpContext không?
- 5. Tại sao không thể lấy Py_buffer từ đối tượng mảng?
- 6. Tại sao HttpCookieCollection.Get trả về null khi gọi từ một đối tượng tự khởi tạo (và không phải từ HttpContext hiện hành)
- 7. Tại sao giả sử HttpContext nếu nó có thể được xây dựng?
- 8. Tại sao tôi không thể lấy được từ lớp trừu tượng System.Enum?
- 9. Tại sao GetVaryByCustomString không được gọi là
- 10. Phát hiện https từ HttpContext trong .net?
- 11. Mẫu C++: 'không được lấy từ loại'
- 12. Mocking một HttpContext Response.Output với Moq
- 13. Mocking HttpContext không hoạt động
- 14. Tại sao tôi không nhận được cảnh báo từ Perl?
- 15. Tại sao NSOrderedSet không được kế thừa từ NSSet?
- 16. Tại sao bạn không thể lấy địa chỉ của nullptr?
- 17. elmah: ngoại lệ mà không có HttpContext?
- 18. Nhận HttpHandlers đã đăng ký trong Web.Config từ HttpContext
- 19. Tại sao những từ này được coi là từ dừng?
- 20. Có thể lấy được từ System.ArgumentException không?
- 21. Tại sao Date.getTimezoneOffset không được chấp nhận?
- 22. tại sao textFieldDidEndEditing: không được gọi?
- 23. Tại sao trình tạo bản sao không được gọi?
- 24. Tại sao tôi không thể lấy được Hiển thị ở đây?
- 25. Tại sao System.nanoTime() lấy 4400 nano giây
- 26. Tại sao từ khóa không đồng bộ tồn tại
- 27. Tại sao auto_ptr không được dùng nữa?
- 28. Tại sao console.log() không in được gì?
- 29. Tại sao JSONObject.length không được xác định?
- 30. Tại sao CultureInfo.NativeName không được viết hoa?
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! –
http://stackoverflow.com/a/4567707/955831 –