2009-04-24 33 views
68

私はMVC ASP .NETアプリケーションで作業しています。私は両方とも比較的新しいです。違いは何MVC ASP.NETのHttpContext.CurrentとController.Contextの違い

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

それとも

HttpContext.User.Identity.Name 

:これを行うには二つの方法があるように思えたため、私は、ユーザーの現在のログを取得しようとしていますコントローラでは、

これら?私がMVCフレームワーク内で知る限り、コントローラは現在のHttpContextをプロパティとして格納しているので、これらのメソッドは同じです。あれは正しいですか?

答えて

82

はい、通常は同じです。ただし、スレッドを追加して作業している場合は、それらは実行されません。 System.Web.HttpContext.Currentはネジ止めです。

+33

これ以外の優れた答えを明確にするために、ThreadStaticは値がスレッドに結びついていることを意味します。つまり、追加スレッドではHttpContext.Currentにアクセスできません。 –

+4

また、コントローラには、RouteDataコレクションのようなMVC固有の情報を含むControllerContextもあることを忘れないでください。 –

+5

HttpContextとスレッディングの深いところへhttp://odetocode.com/articles/112.aspx – River

23

コントローラが提供するコンテキスト(静的なHttpContext.Currentではありません)はモック可能です。あなたのコードをユニットテストすることに興味があれば、モックControllerContextを作成し、コントローラ上でHttpContext.Currentを経由するよりはるかに簡単に設定できます。それ以外の場合、ControllerContext.HttpContextはHttpContext.Currentと同じデータを指します。

+0

非常に重要な点です! –

関連する問題