无法访问HttpContext.Current

Ema*_*a.H 58 c# asp.net-mvc razor asp.net-mvc-4

我无法使用C#4.5访问我的项目MVC4上的HttpContext.Current

我在我的项目中添加了对System.Web的引用,并在控制器页面上添加了using指令...

但我只能访问currentHandler ......

var context = HttpContext.CurrentHandler; //Current
Run Code Online (Sandbox Code Playgroud)

是否HttpContext.Current在C#4.5上弃用?

我看过这个帮助页面:http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx

Dar*_*ren 125

您是否已将System.Web组件包含在应用程序中?

using System.Web;
Run Code Online (Sandbox Code Playgroud)

如果没有,请尝试指定System.Web名称空间,例如:

 System.Web.HttpContext.Current
Run Code Online (Sandbox Code Playgroud)

  • 好笑,但它只对我有用,在添加完整的System.Web.HttpContext.Current没有拿起使用,我想知道为什么 (6认同)

And*_*rei 34

这是因为你指的是名为的控制器的属性HttpContext.要访问当前上下文,请使用完整的类名:

System.Web.HttpContext.Current
Run Code Online (Sandbox Code Playgroud)

但是,强烈建议不要在ASP.NET MVC中访问此类上下文,所以是的,您可以将其System.Web.HttpContext.Current视为在ASP.NET MVC中被弃用.访问当前上下文的正确方法是

this.ControllerContext.HttpContext
Run Code Online (Sandbox Code Playgroud)

或者如果你在控制器内部,只需使用成员

this.HttpContext
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的解释,但我无法访问 Current,只能访问 CurrentHanlder ......所以不要解决我的问题...... (4认同)

Ami*_*din 7

添加一点以减轻这里的混乱。尽管 Darren Davies(已接受)的答案更直接,但我认为 Andrei 的答案是MVC应用程序的更好方法。

Andrei 的回答意味着您可以HttpContext像使用System.Web.HttpContext.Current. 例如,如果您想这样做:

System.Web.HttpContext.Current.User.Identity.Name
Run Code Online (Sandbox Code Playgroud)

你应该这样做:

HttpContext.User.Identity.Name
Run Code Online (Sandbox Code Playgroud)

两者都实现了相同的结果,但(再次)就MVC 而言,更推荐后者。

可以在此处找到有关此问题的另一个很好且直接的信息:MVC ASP.NET 中的 HttpContext.Current 和 Controller.Context 之间的差异