На ум приходит пара решений. Вы можете использовать класс «SessionState», который отображается в запрос и получает / устанавливает информацию как таковую (я делаю это из памяти, так что это вряд ли скомпилируется и предназначено для передачи смысла):
internal class SessionState
{
string ImageName
{
get { return HttpContext.Current.Session["ImageName"]; }
set { HttpContext.Current.Session["ImageName"] = value; }
}
}
А затем из контроллера сделайте что-то вроде:
var sessionState = new SessionState();
sessionState.ImageName = "xyz";
/* Or */
var imageName = sessionState.ImageName;
В качестве альтернативы, вы можете создать метод расширения контроллера:
public static class SessionControllerExtensions
{
public static string GetImageName(this IController controller)
{
return HttpContext.Current.Session["ImageName"];
}
public static string SetImageName(this IController controller, string imageName)
{
HttpContext.Current.Session["ImageName"] = imageName;
}
}
Затем с контроллера:
this.SetImageName("xyz");
/* or */
var imageName = this.GetImageName();
Это, конечно, СУХОЙ. Тем не менее, мне не особенно нравится ни одно из этих решений, так как я предпочитаю хранить как можно меньше данных, если таковые имеются, во время сеанса. Но если вы намерены хранить всю эту информацию без необходимости загружать / распознавать ее из какого-либо другого источника, это самый быстрый (самый грязный) способ, которым я могу придумать. Я совершенно уверен, что есть гораздо более элегантное решение, но у меня нет всей информации о том, что вы пытаетесь сделать и в чем проблема.
Имейте в виду, что при хранении информации в сеансе вам придется обезвоживать / повторно увлажнять объекты посредством сериализации, и вы, возможно, не получаете производительность, которая, как вы думаете, вы делаете, делая это таким образом.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: в ответ на дополнительную информацию
Не уверен, где вы собираетесь развернуть это, но обработка изображений «в реальном времени» - верный путь к атаке DoS. Я предлагаю вам следующее - это предполагает, что это публичное лицо, и любой может загрузить изображение:
1) Разрешить пользователю загружать изображения. Это изображение попадает в очередь обработки для фоновой обработки приложением или каким-либо сервисом. Кроме того, имя изображения попадает в личную очередь обработки пользователя - скорее всего, это таблица в базе данных. Информацию о фоновой обработке в веб-приложении можно найти @ Расписание работы на размещенном веб-сервере
2) Обработайте эти изображения и во время обработки отобразите «графическое изображение обработки». У вас может быть запрос ajax на странице продукта, который проверяет обрабатываемые изображения и пытается загружать их каждые X секунд.
3) Пока изображение «обрабатывается», пользователь может отказаться от обработки, предполагая, что именно он загрузил изображение. Это доступно либо на страницах (страницах) продукта, на которых отображается изображение, либо в отдельном представлении «Очередь пользователей», которое позволит им удалить изображение из рассмотрения.
Итак, вы получите еще несколько доменных объектов, и эти объекты управляются очередью. Я решительный сторонник соглашения о конфигурации, поэтому конечный пункт назначения изображения продукта должен быть предопределен. Что-то вроде:
images / products / {id} .jpg или, если это коллекция, images / products / {id} / {sequence} .jpg.
Тогда вам не нужно знать пункт назначения в форме. Это одинаково для всех изображений.
Затем очередь должна знать, куда было загружено временное изображение и каков идентификатор продукта. Работник очереди извлекает элементы из очереди, обрабатывает их и сохраняет их соответствующим образом.
Я знаю, что это звучит немного более "структурировано", чем вы изначально предполагали, но я думаю, что это немного чище.