web-dev-qa-db-ja.com

HttpContext.Currentにアクセスできません

プロジェクトMVC4のC#4.5でHttpContext.Currentにアクセスできません

プロジェクトにSystem.Webへの参照を追加し、コントローラーページにusing命令を追加しました...

しかし、私はcurrentHandlerにのみアクセスできます...

var context = HttpContext.CurrentHandler; //Current

HttpContext.CurrentはC#4.5では非推奨ですか?

私はこのヘルプページを見ました: http://msdn.Microsoft.com/en-us/library/system.web.httpcontext.aspx

58
Ema.H

アプリケーションにSystem.Webアセンブリを含めましたか?

using System.Web;

そうでない場合は、System.Web名前空間を指定してみてください。例:

 System.Web.HttpContext.Current
122
Darren

これは、HttpContextという名前のコントローラーのプロパティを参照しているためです。現在のコンテキストにアクセスするには、完全なクラス名を使用します。

System.Web.HttpContext.Current

ただし、ASP.NET MVCでこのようなコンテキストにアクセスすることは強く推奨されないため、ASP.NET MVC内でSystem.Web.HttpContext.Currentを非推奨と考えることができます。現在のコンテキストにアクセスする正しい方法は

this.ControllerContext.HttpContext

または、コントローラー内にいる場合は、メンバーを使用してください

this.HttpContext
33
Andrei

ここで混乱を緩和するために少し追加します。 Darren Daviesの(受け入れられた)答えはもっと単純ですが、Andreiの答えはMVCアプリケーションに対してより良いアプローチだと思います。

Andreiからの答えは、System.Web.HttpContext.Currentを使用するのと同じようにHttpContextを使用できることを意味します。たとえば、これを行う場合:

System.Web.HttpContext.Current.User.Identity.Name

代わりにこれを行う必要があります:

HttpContext.User.Identity.Name

どちらも同じ結果を達成しますが、(=)-MVCの観点から、後者がより推奨されます。

この問題に関する別の有益な情報も、ここにあります。 MVC ASP.NETのHttpContext.CurrentとController.Contextの違い

3
Amir Syafrudin