Search code examples
c#asp.nethttphandlerihttphandler

Filehandler in asp.net


I need to track when a pdf is opened in my web app. Right now I am writing to a database when a user clicks on the link and then using window.open from the code behind which isn't ideal since Safari blocks popups and other web browsers give a warning when it runs so I was thinking would a Filehandler be what I need to use. I haven't used a Filehandler in the past so is this something that would work? The pdf is not in binary form, it's just a static file sitting in a directory.


Solution

  • Create an ASHX (faster than aspx onload event) page, pass a the id of the file as a querystring to track each download

     public class FileDownload : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
            {
                //Track your id
                string id = context.Request.QueryString["id"];
                //save into the database 
                string fileName = "YOUR-FILE.pdf";
                context.Response.Clear();
                context.Response.ContentType = "application/pdf";
                context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
                context.Response.TransmitFile(filePath + fileName);
                context.Response.End();
               //download the file
            }
    

    in your html should be something like this

    <a href="/GetFile.ashx?id=7" target="_blank">
    

    or

    window.location = "GetFile.ashx?id=7";
    

    but I'd prefer to stick to the link solution.