【发布时间】:2011-08-23 13:41:45
【问题描述】:
我正在填充一个表示会话变量并存在于类库中的类的实例。我需要填充一个需要我访问Request 对象的属性。我知道我可以使用System.Web.HttpContext.Current.Request 来获取请求对象?
这是一个好习惯吗?有些东西告诉我,我应该在具有 System.Web 命名空间的控制器(或基本控制器)中执行此操作。
【问题讨论】:
标签: asp.net asp.net-mvc
我正在填充一个表示会话变量并存在于类库中的类的实例。我需要填充一个需要我访问Request 对象的属性。我知道我可以使用System.Web.HttpContext.Current.Request 来获取请求对象?
这是一个好习惯吗?有些东西告诉我,我应该在具有 System.Web 命名空间的控制器(或基本控制器)中执行此操作。
【问题讨论】:
标签: asp.net asp.net-mvc
这不是一个坏习惯——对象是可用的——如果你设计要求在那里访问它——那么一定要这样做。一种选择是将请求的实例传递给类的构造函数,如果它让你感觉更干净:)
【讨论】:
System.Web 命名空间。如果将来这个类库被移到 Web 项目之外,那么它不会知道关于 HttpContext 对象的任何事情,这是一个有效的论点吗
根据 ASP.NET 论坛上的Teemu Keiski:
您可以使用
System.Web.HttpContext.Current,但这是不好的做法 因为它使您的类库在网络之外完全无法使用 应用程序(如果你通过它访问 Sessions,它也会得到 在大多数情况下无法用于 Web 服务)。通过直接获取 HttpContext 传递的任何内容都可以传递为 参数到需要它的类中。如果您需要访问 直接响应对象,你可以将
Response.OutputStream传入 类(将其作为一般 Stream 对象)
【讨论】:
只要你依赖System.Web.Abstractions 并将HttpRequestBase 的引用传递给你的类,这基本上没有任何问题。此程序集中的类不是密封的,所有成员都是虚拟的,这意味着您的类仍然是可测试的。
以下SO question的答案中的更多信息
【讨论】: