2012-07-24 41 views
1

上下文

我在控制器中。爲什麼要在HttpContext.Current之前指出System.Web?

我使用的命名空間System.Web

using System.Web; 

當我打電話HttpContext.Current,VS提醒我,CurrentHttpContextBase定義:

HttpContext.Current.Session["currentUser"]; 

如果我表明System.WebHttpContext.Current之前,它的工作原理:

System.Web.HttpContext.Current.Session["currentUser"]; 

問題

爲什麼要在HttpContext.Current之前註明System.Web

回答

1

這是因爲您處於控制器的上下文中。控制器具有HttpContextBase類型的稱爲HttpContext的屬性。此屬性的實例是當前HttpContext的包裝,這意味着您不必調用HttpContext.Current,因爲這已經在使用該屬性的控制器中可用。

你可以不喜歡這樣,而不是(只要你是在一個控制器):

HttpContext.Session["currentUser"]; 
3

你有命名空間衝突,使用此:

using HttpContext = System.Web.HttpContext;

+0

'HttpContext'在另一個空間中定義的? – 2012-07-24 09:05:52

+0

閱讀我的評論。 HttpContext是控制器 – 2012-07-24 09:06:38

+0

@GG的屬性,是的,拉曼已經解釋了在自己的答案中更流行 – 2012-07-24 09:11:24

2

控制器類包含類型HttpContextBase的HttpContext的財產,這就是爲什麼這樣的歧義發生

public HttpContextBase HttpContext { get; } 

這就是爲什麼你應該使用完整的明確化名稱或別名

+0

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext.aspx – 2012-07-24 09:07:19

+0

或者只是跳過表達式中的Current,因爲這個HttpContext實例已經是您需要的實例了 – 2012-07-24 09:09:23

+0

歡迎您! – 2012-07-24 09:16:17

相關問題