Когда создается HttpRequest? - PullRequest
2 голосов
/ 07 марта 2012

В моем веб-приложении MVC я проверяю Request.IsLocal, чтобы увидеть, запущено ли приложение на моем компьютере - если это так, я установил глобальную статическую переменную, которая сообщает остальной части моего приложения, что я нахожусь в 'Режим отладки '.

Проблема в том, что я не знаю, когда делать эту проверку.

Я пытался сделать это в файле global.asax.cs, в Application_Start (),как это:

protected void Application_Start()
{
    if (Request.IsLocal)
        isDebug = true;

    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}

Проблема в том, что объект Request еще не был инициализирован.Я получаю HttpException, который говорит

Входящий запрос не соответствует ни одному маршруту

Итак, мой вопрос, когда инициализируется объект запроса и происходит ли событиекакой-то вид, который я мог бы обработать, чтобы выполнить эту проверку после того, как объект Request будет готов?

Ответы [ 5 ]

3 голосов
/ 07 марта 2012

Проверка System.Environment.MachineName, вероятно, лучший способ сделать это.

2 голосов
/ 07 марта 2012

Application_Start () срабатывает, когда запускается пул приложений вашего сайта MVC.Он действительно не знает об объекте «запрос».Поэтому, даже если это правильное место для установки чего-либо в масштабах приложения, вы не сможете сделать это с помощью Request.IsLocal.Вам придется использовать другую стратегию.@ Предложение Джейсона об использовании имени машины является хорошим вариантом.

Если вы хотите проверять Request.IsLocal для каждого запроса, напишите обработчик для метода Application_BeginRequest в global.asax.См. это для получения дополнительной информации.

2 голосов
/ 07 марта 2012

Может быть, использовать режим отладки web.config, чтобы определить это?

https://stackoverflow.com/a/542896/40822

0 голосов
/ 07 марта 2012

Request и HttpContext.Current создаются для каждого запроса (также он может выглядеть как одноэлементный объект, которым он на самом деле не является). Так что, если вы хотите установить конфигурацию для всего приложения - Application_Start - это правильное место, но у вас не будет там объекта запроса (даже если вы ошиблись бы, потому что запросы не нужны, приходящие с одной и той же машины все время).

0 голосов
/ 07 марта 2012

Проверьте bool isLocal = HttpContext.Current.Request.IsLocal;, но не в Application_Start

Это может помочь: Global ASAX - получить имя сервера

...