我正在开发一个ASP.NET MVC 5应用程序,并将以下代码放在我的DbContextInitializer
类'Seed()
方法中。
string filePath = HttpContext.Current.Server.MapPath("~/Images/" + file);
问题是,每当我在Google Chrome中运行ASP.NET MVC时,HttpContext.Current
null
在调用NullReferenceException
方法时导致Seed()
Seed()
。我尝试过Internet Explorer和Fire Fox,但不会发生错误。我甚至在隐身模式下尝试了Google Chrome,但错误仍然存在。你们有什么可能导致这个错误的想法吗?提前谢谢。
更新: 使用谷歌浏览器时,即使在主页上运行我的Web应用程序也会立即执行{{1}}方法,因为尚未对数据库进行查询,因此该主页不应执行。 IE和Fire Fox没有这种行为。
答案 0 :(得分:2)
请改用:
string filePath = HostingEnvironment.MapPath("~/Images/" + file);
这样你就不会在被剥夺任何HttpContext的方法和线程中获得NRE。
至于为什么HttpContext.Current为null,好吧,可能有很多原因。您的代码在Web应用程序的初始化中运行,并且您的应用程序正在使用集成管道模式,或者您正在一个单独的线程中运行代码,其中根本没有上下文。
结论:远离HttpContext.Current
。每当你使用它时,你应该问自己是否有更好的方法来实现你想要达到的目标。总是存在。