Я разрабатываю веб-приложение. который сгенерирует случайную ссылку, указывающую на изображение на моем сервере. что-то вроде -http://dummy.com/Images/Image1.jpg?id=19234
Здесь эту ссылку может затем использовать кто угодно на своем сайте, теперь я просто хочу знать, сколько сайтов используют мои ссылки, и никто не нажимает на эти ссылки.
Можно ли это сделать с помощью HTTPModule ??





Это так же просто, как поиск в Google? Искать
link:http://dummy.com/Images/Image1.jpg?id=19234
Если вы хотите сделать это программно, вам нужно будет использовать Google API.
@stephbu: Итак, у вас есть предлагаемое решение, которое справляется со случайным файлом, хранящимся на жестком диске неизвестного пользователя? Ответ Oddthinking - прагматичный, который даст довольно разумную отправную точку.
Странное мышление - это правильно. См. http://code.google.com/intl/en/apis/ajaxsearch/documentation/#fonje_snippets или Google API. В них приведены примеры для PHP и Java, но есть также фреймворки AJAX для ASP.NET (http://www.asp.net/ajax/), и я уверен, что C# тоже.
Проблема, с которой вы столкнетесь с HttpHandler, заключается в том, что он обычно запускается только для запросов, которые обрабатываются движком ASP.Net - запросы изображений обычно обрабатываются IIS, не проходя через обработчик.
Ваши веб-журналы должны иметь возможность сообщать вам, кто ссылается на любой данный элемент на ваших серверах - при условии, что они у вас есть, и у вас есть что-то для их обработки - это будет более точным, чем использование Google.
Забегая вперед, один из способов, которыми я делал это в прошлом, - это создание изображения с помощью HttpHandler (реализация IHttpHandler).
Это вернет изображение в виде потока (установив тип контента на «image / jpeg»), и вы можете добавить дополнительную обработку (например, ведение журнала, откуда пришел запрос (реферер), и т. д.).
Ограничение, которое я обнаружил с HttpHandler, заключается в том, что некоторые службы (например, PBBS) требуют ссылки на изображение для расширения изображения - я обошел это, обработав все 404 с помощью страницы ASP.Net, которая проверяет расширение .jpg в запрос. Если он его находит, вместо возврата обычной страницы 404 он возвращает запрошенное изображение. Однако вам необходимо настроить обработчик 404 в IIS, поскольку обработчик ошибок web.config срабатывает только для запросов ASP.Net (веб-службы и страницы типа .aspx).
Пример обработчика:
// Sample from the ASP.Net Personal Web Site Starter Kit
public class Handler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
// Set up the response settings
context.Response.ContentType = "image/jpeg";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput = false;
// QueryString parameters are available here:
// context.Request.QueryString["QueryStringKey"]
// You can also access the Referrer object, and log the requests here.
Stream stream;
// Read your image into the stream, either from file system or DB
if (stream == null)
{
stream = PhotoManager.GetPhoto();
}
// Write image stream to the response stream
const int buffersize = 1024 * 16;
var buffer = new byte[buffersize];
int count = stream.Read(buffer, 0, buffersize);
while (count > 0)
{
context.Response.OutputStream.Write(buffer, 0, count);
count = stream.Read(buffer, 0, buffersize);
}
}
}
У вас может быть аналогичный код (или еще лучше, рефакторинг основного кода потоковой передачи изображений в общий класс) на странице 404, который проверяет наличие расширения изображения и визуализирует изображение таким образом (опять же, устанавливая тип контента , так далее).
Вы можете изменить расширение изображения на расширение aspx (http://dummy.com/Images/Image1.aspx?id=19234), в этом нет проблемы, потому что эта страница - единственное, что она будет делать Response.OutputStream изображения. Другими словами, он будет похож на jpg, но с тем преимуществом, что у вас может быть другой код для обработки.
В этом aspx (перед выводом изображения) мы бы спросили о http_referer, и он был бы сохранен в таблице данных, если этот реестр не существует.
Это действительно полезно, если, например, вы хотите ограничить доступ к изображениям. Вы можете добавить логику, чтобы запретить, если они не авторизованы.
Вы предполагаете, что а) это веб-страница; б) она просматривается; в) что она есть в индексе. Одно или несколько из этих трех легко могут быть правдой.