在类库中访问HttpContext - ASP.NET MVC

时间:2011-05-11 18:49:18

标签: asp.net asp.net-mvc

我正在填充表示会话变量并存在于类库中的类的实例。我需要填充一个需要我访问Request对象的属性。我知道我可以使用System.Web.HttpContext.Current.Request来获取请求对象吗?

这是一个好习惯吗?有些东西告诉我,我应该在具有System.Web命名空间的控制器(或基本控制器)中执行此操作。

3 个答案:

答案 0 :(得分:12)

这不是一个不好的做法 - 对象是可用的 - 如果你设计指令来访问它 - 那么一定要做。一种选择是将请求的实例传递给类的构造函数,如果它让你感觉更清洁:)

答案 1 :(得分:6)

根据ASP.NET论坛上的Teemu Keiski

  

您可以使用System.Web.HttpContext.Current,但这是不好的做法   因为它使您的类库在Web外完全无法使用   应用程序(如果您通过它访问Sessions,它也会获得   在大多数情况下无法用于Web服务。)

     

通过直接获取HttpContext传递的任何内容都可以作为传递   参数进入需要它的类。如果你需要访问   直接响应对象,您可以将Response.OutputStream传递给   类(将它作为一般的Stream对象)

来源:http://forums.asp.net/post/1311405.aspx

答案 2 :(得分:6)

只要您依赖System.Web.Abstractions并向您的班级传递HttpRequestBase的引用,基本上没有任何问题。这个程序集中的类没有被密封,所有成员都是虚拟的,这意味着你的类仍然是可测试的。

以下SO question

的答案中的更多信息