2013-11-01 6 views
0

Я работаю над приложением ASP.NET MVC 5 и имею следующий код, который я разместил внутри своего метода DbContextInitializer «Seed()».HttpContext.Current is null При использовании Google Chrome

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

Проблема заключается в том, когда я запускаю мой ASP.NET MVC в Google Chrome, HttpContext.Current это null вызывает NullReferenceException, когда метод Seed() называется. Я пробовал Internet Explorer и Fire Fox, и ошибка не возникает. Я даже пробовал Google Chrome в режиме инкогнито, но ошибка все еще происходит. Вы, ребята, знаете, что может вызвать эту ошибку? Заранее спасибо.

Обновление: При использовании Google Chrome метод Seed() выполняется сразу же после запуска моего веб-приложения даже на домашней странице, которое не должно выполняться, поскольку запрос на базу данных пока не выполняется. IE и Fire Fox не имеют такого поведения.

+0

Я думаю, что эти два не связаны. Вы положили brakpoint непосредственно в действие вашего контроллера и посмотрели, что такое HttpContext от Chrome? Запросивший браузер является всего лишь агентом пользователя на сервере ... – LDJ

+0

Я поставил точку останова, и он показывает, что свойство «Текущий» свойства «HttpContext» равно null. Я добавил дополнительную информацию по моему вопросу. Благодарю. –

ответ

2

Используйте вместо этого:

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

Таким образом, вы не догонят НВИЭ в методах и нитей, которые лишены какой-либо HttpContext.

Насколько HttpContext.Current является нулевым, ну может быть много причин. Ваш код запускается при инициализации веб-приложения, и ваше приложение использует встроенный режим конвейера или, например, вы запускаете код в отдельном потоке, в котором нет никакого контекста.

Вывод: держаться подальше от HttpContext.Current. Каждый раз, когда вы его используете, вы должны спрашивать себя, нет ли лучшего способа добиться того, чего вы пытаетесь достичь. И всегда есть.

+0

Спасибо! Ваш код ответа работает, хотя мне все еще интересно, почему Chrome ведет себя иначе, чем другие браузеры. –

Смежные вопросы