2014-12-09 3 views
1

Есть ли способ хранения глобальных переменных без использования файлов cookie или сеанса [""] в asp.net mvc?asp.net mvc глобальные переменные без файлов cookie и сеанса [""]

Я знаю, что файлы cookie и сеансы [""] имеют некоторые недостатки, и я хочу использовать лучший метод, если выходим.

+0

в виде скрытого значения –

+0

Что вы подразумеваете под глобальными переменными? –

+0

использовать xml-файлы ... –

ответ

1

Если они действительно являются глобальными переменными, вы должны реализовать singleton pattern и иметь глобальный доступ к Instance, который содержит ваши переменные.

Вот простой пример:

public sealed class Settings 
{ 
    private static Settings instance = null; 
    static readonly object padlock = new object(); 

    // initialize your variables here. You can read from database for example 
    Settings() 
    { 
     this.prop1 = "prop1"; 
     this.prop2 = "prop2"; 
    } 

    public static Settings Instance 
    { 
     get 
     { 
      lock (padlock) 
      { 
       if (instance == null) 
       { 
        instance = new Settings(); 
       } 
       return instance; 
      } 
     } 
    } 

    // declare your global variables here 
    public string prop1 { get; set; } 
    public string prop2 { get; set; } 
} 

вы можете использовать их в своем коде, как это:

var globalvar1 = Settings.Instance.prop1; 

Этот класс с его переменными будет инициализирован только один раз (при запуске приложения), и он будет доступен в вашем приложении по всему миру.

0

Уверенный: HttpContextBase.Application (без истечения срока действия) или HttpContextBase.Cache (с истечением срока действия). Вы можете получить доступ к экземпляру HttpContextBase с помощью свойства HttpContext класса Controller.

1

В основном вы следующие параметры:

  • Печенье - действует до тех пор, как вы установите, должны быть разрешены в браузере клиента, могут быть удалены пользователем, хранится на компьютере пользователя.
  • Сессия - действительна для всех запросов, а не для одного перенаправления, хранящегося на сервере.
  • ViewData - после перенаправления он очищается (живет только при одном запросе).
  • TempData - он полезен для передачи коротких сообщений для просмотра после считывания значения, которое оно удаляет.
  • ViewBag - доступен только во время текущего запроса, если перенаправление происходит, тогда оно становится нулевым, является динамическим, поэтому у вас нет intellisense, и ошибки могут возникать только во время выполнения.

Здесь - http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html - вы можете найти фантастическую статью, которая описывает их.

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