MVC,不是“应该”的不再使用 HttpContext.Current 了吗?

发布于 2025-01-01 11:23:12 字数 653 浏览 2 评论 0原文

有人在这里的帖子中评论说你不应该使用使用 MVC 时的 HttpContext.Current 相反,您应该使用 ControllerBase.ControllerContext。在某些方面,这是有道理的,但在其他方面则不然。

例如,ControllerContext 是一个实例变量,所以在我想要引用的任何地方,比如说我的 Session 变量,我都需要引用 Controller?为什么我们“不应该”在 MVC 中使用 HttpContext.Current,而你仍然可以?是否有一种“适当的”MVC“方式”来获取我的 Session 对象而无需引用控制器?

我知道测试方面,由于许多其他地方所述的原因,它更好,但我正在开发一个管理 Session 变量和引用 HttpContext.Current 的项目,我想知道是否有更好的方法来掌握会话对象,无需传递对控制器的引用。

Someone in a post here, commented that you should not use HttpContext.Current when using MVC, rather, you should be using ControllerBase.ControllerContext. In some respects, this makes sense, but in other respects it doesn't.

For example, ControllerContext is an instance variable, so everywhere I want to reference, say, my Session variables, I need to have a reference to the Controller? Why are we "not supposed" to be using HttpContext.Current in MVC, when you still can? Is there an "appropriate" MVC "way" to get at my Session object without having to have a reference to the Controller?

I know test-wise, it is better for reasons stated in many other places, but I am working on a project that manages Session variables and references HttpContext.Current and I want to know if there is a better way to get my hands on the Session object without passing a reference to the controller.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

屋檐 2025-01-08 11:23:12

这主要是因为如果使用 HttpContext.Current ,单元测试将非常困难,因为使用普通的模拟框架不可能模拟此值。

HttpContext.Current 也会导致更脆弱的代码,因为它可能被滥用和误用。例如,您可以在业务层中使用它,因为它很方便,但如果您选择使用 ASP.NET 之外的替代表示层,它就会崩溃。

一般来说,静态方法现在不受欢迎,因为它们不能依赖注入

This is mainly since unit testing would be very difficult if you use HttpContext.Current since mocking this value is not possible using normal mock frameworks.

HttpContext.Current also makes for more brittle code since it can be abused and misused. For example, you can use it in business layer since it is convenient but it will break if you choose to use an alternative presentation layer other than ASP.NET.

Generally static methods are nowadays frowned upon since they cannot be dependency-injected.

心碎无痕… 2025-01-08 11:23:12

您的一篇文章是由于模拟测试造成的,根据模拟,可能没有 HttpContext,只有控制器上下文。否则,我会使用 HttpContext.Current,只是不在我的单元测试中使用。

Your one post was due to Mock testing, where depending on the Mock there may not be a HttpContext, only a controller context. Otherwise, I do use HttpContext.Current, just not in my unit tests.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文