0

我正在开发一个 ASP.NET MVC 5 应用程序,并在我的DbContextInitializerSeed()方法中放置了以下代码。

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

问题是,每当我在 Google Chrome 中运行我的 ASP.NET MVC 时,HttpContext.Current都会null导致 调用NullReferenceExceptionSeed()方法。我已经尝试过 Internet Explorer 和 Fire Fox,但没有出现错误。我什至在隐身模式下尝试了谷歌浏览器,但错误仍然存​​在。你们对可能导致此错误的原因有任何想法吗?提前致谢。

更新:使用谷歌浏览器时,Seed()即使在主页上运行我的 Web 应用程序,该方法也会立即执行,因为还没有对数据库的查询。IE 和 Fire Fox 没有这种行为。

4

1 回答 1

2

改用这个:

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

这样,您就不会在被剥夺任何 HttpContext 的方法和线程中获得 NRE。

至于为什么 HttpContext.Current 为空,嗯,可能有很多原因。您的代码在 Web 应用程序的初始化中运行,并且您的应用程序正在使用集成管道模式,或者例如,您正在一个单独的线程中运行代码,其中根本没有上下文。

结论:远离HttpContext.Current。每次使用它时,您都应该问自己是否没有更好的方法来实现您想要实现的目标。而且总是有。

于 2013-11-01T07:17:16.570 回答