图像重定向和记录

时间:2012-03-27 15:18:14

标签: c# image redirect iis-6

我们为图像(jpg)创建一个唯一命名的请求,我们需要重定向它并收集其请求的名称。我们尝试在Global.asax中执行此操作,它在Dev中运行良好,但在生产中它似乎不会触发。

它必须是一个图像(请求以jpg结尾)或我们之间的某些处理器,客户端将剥离请求。这在一个虚拟目录中运行,除了这些图像请求之外,它只做很少的事情。 MVC不是一种选择。

Ex. request = domain/Copyright_123456789.jpg
    response =  domain/images/Copyright.jpg
    collect = 123456789 and place in database

代码

    void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Request.AppRelativeCurrentExecutionFilePath.Contains("Copyright_") && Request.AppRelativeCurrentExecutionFilePath.Contains(".jpg"))
        {
            int ADFID = 0;
            string[] ImageNameArray = Request.AppRelativeCurrentExecutionFilePath.Split(new char[] { '_', '.' });
            if (int.TryParse(ImageNameArray[1], out ADFID))
            {
                QueriesTableAdapter SaveView = new QueriesTableAdapter();
                SaveView.FirstQuote_Operations_ClientLeadEmailViews_Save(ADFID);
            }
            HttpContext.Current.RewritePath("~/images/Copyright.jpg");
        }
    }

非常感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

以下是我如何实现这一目标。图片src =“website / this virtual directory / Copyright_12345.jpg” 12345是我们收集的价值,我们在网站上以真实的jpg回复

web.config

<httpHandlers>
    <remove verb="*" path="*.jpg"/>
    <add verb="*" path="*.jpg" type="Tracker.TrackerClass" validate="false"/>
</httpHandlers>

跟踪器类

    public class TrackerClass : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        int ADFID = 0;
        string[] ImageNameArray = context.Request.AppRelativeCurrentExecutionFilePath.Split(new char[] { '_', '.' });
        if (int.TryParse(ImageNameArray[1], out ADFID))
        {
            **store to database***
        }

        context.Response.ContentType = "image/jpg";
        context.Response.WriteFile("images/Copyright.jpg");
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

这是网站上唯一的课程。在IIS中创建虚拟目录以使其生效 创建后,获取属性,虚拟目录,配置,映射。在Application Extensions下,单击Add。输入.jgp,您的.NET版本isapii(从窗口中的大多数其他扩展名复制它),并将Verb设置为All。请务必取消底部的验证文件。

应该这样做。

答案 1 :(得分:0)

这似乎是一种奇怪的方式来处理事情....我建议使用ASP.NET MVC,因为它在路由方面具有很好的灵活性....检查每个请求似乎都不是很好。

答案 2 :(得分:0)

您是否尝试过creating a handler页并将其视为jpg?您是否能够在查询字符串中传递任何信息?

 public void ProcessRequest (HttpContext context) 
 {
    if (context.Request.QueryString["copyright"] == "y")
    {     
        context.Response.ContentType = "image/jpg";
        context.Response.WriteFile("~/Flower1.jpg");
    }
 }