2012-03-07 1 views
2

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

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

Я пытался сделать это в файле 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 который говорит

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

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

+2

Помогает ли это (чисто с точки зрения понимания, когда создается 'Request'): http://blog.codeville.net/2007/11/20/aspnet-mvc-pipeline-lifecycle/ – sellmeadog

ответ

2

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

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

+1

Jason and dotjoe предоставил отличные идеи, но ваш ответ прояснился для меня, когда к объекту запроса нужно получить доступ. – Slider345

3

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

+0

+1. Добавление списка машин в Web.config и проверка его может сделать его более гибким. –

0

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