2013-11-01 29 views
0

我正在研究ASP.NET MVC 5應用程序,並將下面的代碼放在我的DbContextInitializer類的Seed()方法中。當使用谷歌瀏覽器時HttpContext.Current爲空

string filePath = HttpContext.Current.Server.MapPath("~/Images/" + file); 

的問題是,每當我在谷歌瀏覽器運行我的ASP.NET MVC,HttpContext.Currentnull造成NullReferenceExceptionSeed()方法被調用。我曾嘗試過Internet Explorer和Fire Fox,並且沒有發生錯誤。我甚至在隱身模式下嘗試過谷歌瀏覽器,但仍然出現錯誤。你們有什麼想法可能會導致這個錯誤?提前致謝。

更新: 使用谷歌瀏覽器時,即使在主頁上運行我的Web應用程序時,也會立即執行Seed()方法,因爲沒有對數據庫的查詢,所以應該不執行該主頁。 IE和Fire Fox沒有這種行爲。

+0

我認爲這兩者是無關的。你是否直接在你的控制器動作中放置了一個brakpoint,並且看看Chrome中有什麼HttpContext?提出請求的瀏覽器只是服務器的用戶代理... – LDJ

+0

我已經提出了一個斷點,它表明'HttpContext'屬性的'Current'爲null。我在我的問題上添加了更多信息。謝謝。 –

回答

2

使用這個代替:

string filePath = HostingEnvironment.MapPath("~/Images/" + file); 

這樣你拿不到的方法和線程的NRE被剝奪了任何的HttpContext的。

至於爲什麼HttpContext.Current爲空,那麼可能有很多原因。您的代碼在Web應用程序的初始化中運行,並且您的應用程序正在使用集成管道模式,或者例如您正在獨立線程中運行代碼,其中根本沒有上下文。

結論:遠離HttpContext.Current。每當你使用它,你應該問自己是否沒有更好的方法來實現你想要達到的目標。總有。

+0

謝謝!儘管我仍然想知道爲什麼Chrome的行爲與其他瀏覽器的行爲不同,但您的答案代碼仍然有效。 –