[英]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.