как узнать, какое изображение было запрошено C #, ASP.Net - PullRequest
0 голосов
/ 22 декабря 2008

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

Здесь эта ссылка может быть использована кем-либо на их сайте, теперь я просто хочу узнать, сколько сайтов используют мои ссылки, и никто не нажимает на эти ссылки.

Можно ли это сделать с помощью HTTPModule ??

Ответы [ 4 ]

2 голосов
/ 22 декабря 2008

Это так же просто, как Google? Искать

link:http://dummy.com/Images/Image1.jpg?id=19234

Если вы хотите сделать это программно, вам нужно будет использовать Google API.

1 голос
/ 22 декабря 2008

Проблема, с которой вы столкнетесь при использовании 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, которая проверяет наличие расширения изображения и выводит изображение таким образом (опять же, настройка тип содержимого и т. д.).

0 голосов
/ 22 декабря 2008

Вы можете изменить расширение вашего изображения на расширение aspx (http://dummy.com/Images/Image1.aspx?id=19234),, в этом нет проблем, потому что на этой странице единственное, что будет делать Response.OutputStream изображения. это значит, что он будет похож на jpg, но с преимуществом вы можете обработать другой код.

В этом aspx (перед выводом изображения) мы спрашиваем о http_referer, и он будет сохранен в таблице данных, если этот реестр не существует.

Это действительно полезно, если, например, вы хотите ограничить доступ к изображениям. Вы можете добавить некоторую логику, чтобы запретить, если они не вошли в систему.

0 голосов
/ 22 декабря 2008

Странное мышление верно. См. http://code.google.com/intl/en/apis/ajaxsearch/documentation/#fonje_snippets или API Google. Они приводят примеры для PHP и Java, но есть также AJAX-фреймворки для ASP.NET (http://www.asp.net/ajax/),, и я уверен, что C # также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...