gpt4 book ai didi

c# - System.Web.HttpContext 与 System.Web.MVC.HttpContext

转载 作者:太空狗 更新时间:2023-10-29 22:10:44 28 4
gpt4 key购买 nike

我的 Controller 有这样声明的用法(不确定顺序是否重要)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

我正在尝试访问 HTTPContext 并注意到我什至无法获取 HTTPContext.Current

似乎有两个 HTTPContext 变量,MVC 变量是先例。我必须完全限定对象的命名空间才能让应用程序编译。

  • 为什么有两个 HTTPContext 变量?
  • 使用顺序是否会影响我的冲突对象将与哪个对象一起编译?

最佳答案

System.Web.HttpContext 是一种具有静态 Current 属性的类型,您可以使用该属性获取当前上下文。

没有 System.Web.Mvc.HttpContext 类型。您可能看到的是 HttpContext Controller 类型公开的属性。此属性为您提供 Controller 当前正在执行的上下文,并作为获取“当前”上下文的一种方式。它被认为是优越的,因为您可以为了测试您的 Controller 而注入(inject)伪造的上下文,而伪造 HttpContext.Current 非常困难。

虽然不完全相关,但使用顺序并不重要:它们都会被检查,如果找到两种可能的类型,编译器将抛出一个关于歧义的异常。重要的是你是在命名空间声明的内部还是外部声明你的使用。编译器首先检查“内部”上下文,因此如果您在命名空间中声明类型,则首先检查命名空间内 using 语句中的类型,并将优先于您自己的类型。如果将 using 语句移到命名空间之外,则命名空间中的类型将优先。

关于c# - System.Web.HttpContext 与 System.Web.MVC.HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com