簡體   English   中英

如何知道已請求哪個圖像C#,ASP.Net

[英]how to know which Image has been requested C#,ASP.Net

我正在開發一個Web應用程序。 這將生成一個指向我服務器上圖像的隨機鏈接。 -http://dummy.com/Images/Image1.jpg?id=19234

在這里,任何人都可以使用此鏈接,現在我只想知道有多少個站點正在使用我的鏈接,而無需任何人單擊這些鏈接。

可以使用HTTPModule完成嗎?

這像谷歌搜索一樣簡單嗎? 搜索

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

如果要以編程方式執行此操作,則需要使用Google API。

HttpHandler的問題在於,它通常只對ASP.Net引擎正在處理的請求起作用-圖像請求通常將由IIS處理,而無需通過處理程序。

您的網絡日志應該能夠告訴您服務器上任何給定項目的引用者是誰(假設您擁有這些引用者,並且您有一些要處理的內容),這比使用Google更為准確。

展望未來,我過去做過的一種方法是使圖像由HttpHandler生成(實現IHttpHandler)。

這將以流的形式返回圖像(將內容類型設置為“ image / jpeg”),並且您可以添加進一步的處理(例如記錄請求(引用)的來源等)。

我在HttpHandler上發現的局限性在於,某些服務(例如PBBS)要求圖像鏈接具有圖像擴展名-我通過使用ASP.Net頁面處理所有404來檢查此問題,該頁面檢查了.jpg擴展名。請求。 如果找到一個頁面,則不返回通常的404頁面,而是返回重新記錄的圖像。 不過,您將需要在IIS中配置404處理程序,因為web.config錯誤處理程序僅適用於ASP.Net請求(Web服務和.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頁面中使用類似的代碼(或者更好的方法是,將主圖像流代碼重構為共享類),以檢查圖像擴展名是否存在,並以這種方式呈現圖像(再次設置內容類型)等)。

奇怪的想法是正確的。 請參閱http://code.google.com/intl/zh-CN/apis/ajaxsearch/documentation/#fonje_snippets或Google的API。 它們提供了PHP和Java的示例,但是也有用於ASP.NET的AJAX框架( http://www.asp.net/ajax/ ),並且我相信C#也是如此。

您可以將圖像擴展名更改為aspx擴展名http://dummy.com/Images/Image1.aspx?id=19234 ),這沒有問題,因為此頁面唯一要做的是Response.OutputStream圖片。 也就是說,它將類似於jpg,但優點是您可以處理其他代碼。

在此aspx中(在輸出圖像之前),我們將詢問有關http_referer的信息,如果該注冊表不存在,它將存儲在數據表中。

例如,如果您想限制對圖像的訪問,這將非常有用。 如果未登錄,則可以添加一些邏輯以禁止它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM