Я хочу знать, есть ли рекомендуемый способ определения того, работает ли приложение asp локально. На данный момент я использую объект Request и выполняю строковый поиск localhost или 127.0.0.1 в переменной сервера, но это имеет несколько ограничений. Самая большая проблема в том, что объект Request не всегда доступен, когда мне это нужно.
79
Вы можете проверить свойство Request.IsLocal
источник
Это сработало для меня с Application_Start
if (!HostingEnvironment.IsDevelopmentEnvironment) { GlobalFilters.Filters.Add(new RequireHttpsAttribute()); }
Чтобы узнать больше о том, как устанавливается IsDevelopmentEnvironment, просмотрите следующий поток.
Что определяет значение HostingEnvironment.IsDevelopmentEnvironment в ASP.NET?
источник
В представлении MVC / странице ASP / коде за классом:
bool isLocal = HttpContext.Current.Request.IsLocal;
В контроллере MVC:
bool isLocal = Request.IsLocal;
источник
Request.IsLocal - это то же самое, что и проверка 127.0.0.1 или :: 1. См. Этот пост: http://forums.asp.net/p/1065813/4081335.aspx .
источник
IsLocal
также относится к тому, когда вы посещаете сайт IIS с ЖЕСТКОГО компьютера. При этом также по умолчанию отображаются подробные сообщения об ошибках YSOD при входе с локального компьютера.Если HttpContext.Current не равен null, используйте
HttpContext.Current.Request.IsLocal
В противном случае, например, в App_Start или до того, как HttpContext.Current станет доступен, вы можете протестировать
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
или выделенный диск на вашем ПК.
Другой способ - использовать постоянную переменную компиляции, установленную в производственной среде, например, из Azure и visualstudio.com, если вы их используете.
Он грязный, но работает.
источник
Запрос не всегда доступен в среде ASP.NET?
HttpContext и его свойства Request / Response инициализируются, как только сервер начинает обрабатывать страницу. Таким образом, в любом месте, где вы можете выполнить код C # в жизненном цикле своей страницы, вы должны иметь возможность проверить URL-адрес запроса.
источник
Application_Start
, выполняется без HTTPContext.Application_Start
могут всегда выполняться в фоновом режиме. Также вопрос не имеет ничего общего с запросами страниц.В ответ на комментарий @Meh Men's для другого ответа в этой теме, который спросил:
Если вы уверены, что ваша производственная и тестовая или «гомологичные» версии вашего веб-сайта будут развернуты с выпускной версией вашего веб-сайта, в то время как ваша локальная среда будет построена и разработана в режиме «отладки», вы можете использовать
#if DEBUG
sintax для напишите код, который должен запускаться только локально, а за пределами этого блока или даже внутри соответствующего#else
блока, вы можете написать другой код, который вы хотите запускать только тогда, когда он не локально (например: удаленно).Вот небольшой пример того, как я решил эту проблему в конкретном проекте, над которым я сейчас работаю:
#if DEBUG // Code here will only be run locally. #else // Code here will only be run "remotely".
источник