我正在填充表示会话变量并存在于类库中的类的实例。我需要填充一个需要我访问Request
对象的属性。我知道我可以使用System.Web.HttpContext.Current.Request
来获取请求对象吗?
这是一个好习惯吗?有些东西告诉我,我应该在具有System.Web
命名空间的控制器(或基本控制器)中执行此操作。
答案 0 :(得分:12)
这不是一个不好的做法 - 对象是可用的 - 如果你设计指令来访问它 - 那么一定要做。一种选择是将请求的实例传递给类的构造函数,如果它让你感觉更清洁:)
答案 1 :(得分:6)
根据ASP.NET论坛上的Teemu Keiski:
您可以使用
System.Web.HttpContext.Current
,但这是不好的做法 因为它使您的类库在Web外完全无法使用 应用程序(如果您通过它访问Sessions,它也会获得 在大多数情况下无法用于Web服务。)通过直接获取HttpContext传递的任何内容都可以作为传递 参数进入需要它的类。如果你需要访问 直接响应对象,您可以将
Response.OutputStream
传递给 类(将它作为一般的Stream对象)
答案 2 :(得分:6)
只要您依赖System.Web.Abstractions
并向您的班级传递HttpRequestBase
的引用,基本上没有任何问题。这个程序集中的类没有被密封,所有成员都是虚拟的,这意味着你的类仍然是可测试的。