Как узнать, какое изображение было запрошено C#, ASP.Net

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
951
4

Ответы 4

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

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

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

Вы предполагаете, что а) это веб-страница; б) она просматривается; в) что она есть в индексе. Одно или несколько из этих трех легко могут быть правдой.

stephbu 22.12.2008 10:03

@stephbu: Итак, у вас есть предлагаемое решение, которое справляется со случайным файлом, хранящимся на жестком диске неизвестного пользователя? Ответ Oddthinking - прагматичный, который даст довольно разумную отправную точку.

Jon Skeet 22.12.2008 10:12

Странное мышление - это правильно. См. 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, и он был бы сохранен в таблице данных, если этот реестр не существует.

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

Другие вопросы по теме