Несмотря на то, что ничто не мешает определенному человеку очищать общедоступный контент, вы можете сделать несколько основных вещей, чтобы смягчить опасения клиента:
Ограничение скорости по учетной записи пользователя, IP-адресу , пользовательский агент и т.д. Если вы обнаружите большой объем передаваемых данных, вы закроете учетную запись или IP-адрес.
Требуется JavaScript - чтобы гарантировать, что клиент имеет некоторое сходство с интерактивным браузером, а не пауком-босиком ...
RIA - сделать ваши данные доступными через интерфейс насыщенного интернет-приложения. Сетки на основе JavaScript включают в себя ExtJ, YUI, Dojo и т. Д. Более богатые среды включают Flash и Silverlight, как 1kevgriff упоминает .
Кодировать данные как изображения. Это довольно навязчиво для обычных пользователей, но вы могли бы закодировать некоторые из ваших таблиц данных или значений в виде изображений, а не текста, что могло бы победить большинство текстовых анализаторов, но, конечно, не надежно.
robots.txt - для запрета явных веб-пауков, известных агентов-пользователей роботов.
User-agent: *
Disallow: /
Использовать метатеги роботов. Это остановило бы пауков. Это не позволит Google проиндексировать вас, например:
< meta name = "robots" content = "noindex, follow, noarchive" >
Существуют разные уровни сдерживания и первый вариант, вероятно, наименее навязчивый.
Переменная диапазона g
имеет свойство Key
, которое представляет ключ, по которому вы сгруппированы. В вашем случае это b.Field
. Итак, если вы хотите получить account_id
с результатами, вам понадобится этот запрос:
var balances = from b in dtAccounts.AsEnumerable()
group b by b.Field<decimal>("ACCOUNT_ID") into g
select new
{
accountId = g.Key,
credit = g.Sum(b => b.Field<decimal>("CREDIT")),
debit = g.Sum(b => b.Field<decimal>("DEBIT"))
}