2014-12-19 6 views
2

Я просматривал документацию здесь: http://msdn.microsoft.com/en-us/library/ms178594%28v=vs.140%29.aspx, чтобы создать переменную, которая может сообщить программе, если она находится в локальной среде или нет.Доступ к переменным ApplicationState

Так это то, что я имею в Global.asax.cs:

namespace website 
{ 
    public class MvcApplication : System.Web.HttpApplication 
    { 
     ... 
     Application["loc"] = false; 
     if (Request.Headers["host"].Contains("localhost")) 
     { 
      Application["loc"] = true; 
     } 
    } 
} 

При попытке доступа к переменным ApplicationState в файле модели, как это:

if (Application["loc"] != null) 
{ 
    bool loc = (bool)Application["loc"]; 
} 

Какой именно как это указано в документации, я получаю ошибку:

The Name Application does not exist in the current context.

Что я делаю неправильно?

ответ

2

Application - свойство уровня экземпляра, определенное на HttpApplication. Вы не можете получить доступ к нему без экземпляра HttpApplication.

Ссылка на текущий HttpApplication может быть извлечена через статическое свойство HttpContext.Current, которое вернет объект HttpContext; это может be further queried, чтобы получить фактический HttpApplication,

, например

var myHttpApp = HttpContext.Current.ApplicationInstance; 
var appState = myHttpApp.Application; 

Вы также можете напрямую использовать HttpContext.Current.Application, чтобы получить ссылку на текущий объект HttpApplicationState.

Чтобы исправить код, вы могли бы сделать что-то вроде этого:

if (HttpContext.Current.Application["loc"] != null) 
{ 
    bool loc = (bool)(HttpContext.Current.Application["loc"]); 
} 
+0

Это работало, теперь у меня есть еще одна проблема, хотя, когда запрос еще не существует, когда Global.asax.cs запускается. Есть идеи? –

+0

Да, вы должны делать это (анализировать заголовки) в действии вашего контроллера или, возможно, в качестве обработчика/фильтра сообщений. Global.asax.cs хорош для «глобальных» действий; анализ заголовков не является таким действием, поскольку он будет меняться в зависимости от запроса. –

+0

ОК, это работает, но пропустит эту логику для каждого запроса, когда она находится в контроллере. Я пытаюсь заставить его работать только с самого начала, а затем быть одинаковым для всех будущих запросов. –