Я очень не хочу сказать Вам, но я и другие можем использовать значения по умолчанию белого списка для управления нашей фильтрацией спама.
Это означает, что вся электронная почта из неизвестного источника является автоматически спамом и отклоненный в папку для спама. (Я не позволяю своему почтовому сервису удалить спам, потому что я хочу всегда рассмотреть прибытие для ложных положительных сторон, что-то, что довольно легко сделать быстрым сканированием папки.)
у меня даже есть электронная почта от меня, переходят к блоку спама потому что (1) я обычно не посылаю электронное письмо мне и (2) существуют спаммеры, которые фальсифицируют мой обратный адрес в спаме, отправленном мне.
Так для выхода из обозначения спама я должен полагать, что почта могла бы быть законной (от отправителя и подвергнуть информацию), и откройте его сначала в простом тексте (мое значение по умолчанию для всей входящей корреспонденции, спама или не), чтобы видеть, законно ли это. Моя папка для спама не будет использовать ссылок в электронных письмах, таким образом, я буду защищен от хитрых ссылок изображения и другого проступка.
, Если я хочу, чтобы будущее прибытие из того же источника перешло к моему в поле и не было отклонено для обзора спама, я определю это к своему почтовому клиенту. Для тех организаций, которые используют средства передачи массовой рассылки и уникальные адреса отправителя на почтовую часть, очень жаль. Они никогда не получают мое одобрение и всегда обнаруживаются в моей папке для спама, и если я буду занят, то я никогда не буду смотреть на них.
Наконец, если электронное письмо не является четким в простом тексте, даже когда отправлено как HTML, я, вероятно, просто удалю его, если это не будет что-то, что я знаю, представляет интерес для меня на основании источника и предыдущих ценных событий.
, Как Вы видите, это в конечном счете находится под пользовательским контролем и нет никакого автоматизированного действия, которое убедит такую систему, что Ваша почта законна от одной только своей структуры. В этом случае необходимо играть по правилам, не делайте ничего, что подобно фишингу, и облегчите для пользователей, готовых доверять почте для добавления Вас к их белому списку.
Пара решений приходят на ум. Вы можете использовать класс «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.
Тогда вам не нужно знать место назначения в форма. Это' s одинаково для всех изображений.
Затем очереди необходимо знать, куда было загружено временное изображение и какой был идентификатор продукта. Работник очереди извлекает элементы из очереди, обрабатывает их и сохраняет их соответствующим образом.
Я знаю, что это звучит немного более «структурированно», чем вы изначально планировали, но я думаю, что это немного чище.
Есть ли полная эквивалентность между UploadController и ProductController?
По мере того, как файлы загружаются с помощью UploadController, данные о загрузке сохраняются в Сессии. После того, как это произойдет, мне нужно получить доступ к данным сеанса в ProductController.
Когда я прочитал, что для UploadControl требуется доступ для чтения и записи к данным выгрузки, ProductController нужно только прочитать.
Если это правда, то вы можете прояснить это, используя неизменяемую оболочку вокруг информации о загрузке, и UploadController поместит ее в сеанс.
Сам сеанс, по определению, является публичной общей доской объявлений, отделяет явные отношения за счет того, что позволяет любому получить и поместить. Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.
Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.
s true, то вы можете прояснить это, используя неизменяемую оболочку вокруг информации о загрузке и заставив UploadController поместить ее в сеанс.Сам сеанс по определению является публичной общей доской объявлений, отделяет явные отношения за счет того, что позволяет любому получить и поместить. Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.
Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.
s true, то вы можете прояснить это, используя неизменяемую оболочку вокруг информации о загрузке и заставив UploadController поместить ее в сеанс.Сам сеанс по определению является публичной общей доской объявлений, отделяет явные отношения за счет того, что позволяет любому получить и поместить. Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.
Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.
Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.
Вы можете разрешить ProductController знать о UploadController и, следовательно, избавиться от необходимости передавать информацию о загрузке через сеанс. Я считаю, что информация о загрузке интересна для публики, поэтому использование сеанса является разумным.Я не вижу здесь нарушений DRY, мы явно пытаемся разделить обязанности.