我正在开发一个网络应用程序。这将生成一个指向我服务器上的图像的随机链接。类似于 - http://dummy.com/Images/Image1.jpg?id=19234
此处此链接可供其网站上的任何人使用,现在我只想知道有多少网站正在使用我的链接,而没有任何人点击这些链接。
可以使用HTTPModule吗?
答案 0 :(得分:2)
这就像谷歌搜索一样简单吗?搜索
link:http://dummy.com/Images/Image1.jpg?id=19234
如果您想以编程方式执行此操作,则需要使用Google API。
答案 1 :(得分:1)
你对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页面中使用类似的代码(或者更好的方法,将主图像流代码重构为共享类),检查图像扩展的存在,并以这种方式呈现图像(同样,设置内容类型等。)
答案 2 :(得分:0)
Oddthinking是对的。请参阅http://code.google.com/intl/en/apis/ajaxsearch/documentation/#fonje_snippets或Google的API。他们给出了PHP和Java的例子,但也有ASP.NET的AJAX框架(http://www.asp.net/ajax/),我也确定C#。
答案 3 :(得分:0)
您可以将图片扩展名更改为aspx扩展名(http://dummy.com/Images/Image1.aspx?id=19234),这里没有问题,因为这个页面唯一可以做的就是Response.OutputStream图片。也就是说它与jpg类似,但是有了优势,你可以使用其他一些代码进行处理。
在这个aspx中(在输出图像之前),我们会询问http_referer,如果这个注册表不存在,它将存储在数据表中。
如果您想限制对图像的访问,这非常有用。如果他们没有登录,你可以添加一些逻辑来禁止。