C# asp.net中的文件处理程序

C# asp.net中的文件处理程序,c#,asp.net,httphandler,ihttphandler,C#,Asp.net,Httphandler,Ihttphandler,我需要跟踪在我的web应用程序中打开pdf的时间。现在,当用户单击链接,然后使用window.open时,我正在向数据库写入代码,这并不理想,因为Safari会阻止弹出窗口,其他web浏览器在运行时会发出警告,所以我想我需要使用文件处理程序。我在过去没有使用过文件处理程序,所以这是可行的吗?pdf不是二进制格式,它只是一个位于目录中的静态文件。以下是自定义HttpHandler的一个选项,该自定义HttpHandler可以对pdf使用常规锚定标记: 创建ASHX(右键单击项目->添加新项目->通

我需要跟踪在我的web应用程序中打开pdf的时间。现在,当用户单击链接,然后使用window.open时,我正在向数据库写入代码,这并不理想,因为Safari会阻止弹出窗口,其他web浏览器在运行时会发出警告,所以我想我需要使用文件处理程序。我在过去没有使用过文件处理程序,所以这是可行的吗?pdf不是二进制格式,它只是一个位于目录中的静态文件。

以下是自定义HttpHandler的一个选项,该自定义HttpHandler可以对pdf使用常规锚定标记:

创建ASHX(右键单击项目->添加新项目->通用处理程序)

编辑web.config以对所有PDF使用处理程序:

<httpHandlers>
    <add verb="*" path="*.pdf" type="YourAppName.ServePDF" />
</httpHandlers>

这里有一个自定义HttpHandler的选项,该选项使用常规锚定标记作为PDF:

创建ASHX(右键单击项目->添加新项目->通用处理程序)

编辑web.config以对所有PDF使用处理程序:

<httpHandlers>
    <add verb="*" path="*.pdf" type="YourAppName.ServePDF" />
</httpHandlers>

创建一个ASHX(比aspx onload事件更快)页面,将文件id作为查询字符串传递,以跟踪每次下载

 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
        }
在你的html中应该是这样的

<a href="/GetFile.ashx?id=7" target="_blank">
但我更愿意坚持使用链接解决方案。

创建一个ASHX(比aspx onload事件更快)页面,将文件id作为查询字符串传递,以跟踪每次下载

 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
        }
在你的html中应该是这样的

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


但是我更愿意坚持使用链接解决方案。

@patxy An
IHttpHandler
实现可以而且已经被用于这类事情,这是可以肯定的。我只是在寻找一种方法来写入数据库,然后在另一个选项卡中打开文件,而不必使用窗口。open@SamCromer如果您不想制作自己的HttpHandler,然后只需将链接更改为链接按钮,在回发时执行所需的代码,并将用户重定向到文档。否则,考虑一下。@ MikeSmithDev,这就是我目前正在做的事情,但是弹出式拦截器正在破坏聚会,Safari甚至没有给出警告它只是不起作用。下面是我所做的:受保护的void AccessFile_Click(objectsender,EventArgs e){在所有版本的Safari字符串newWindowUrl=“pdf/Newsletter01.pdf#zoom=100”;string javaScript=“\n”+“\n”+“\n”;this.RegisterStartupScript(“,javaScript)}HTML-@patxy-An
IHttpHandler
实现可以而且已经用于这类事情。我只是在寻找一种方法,写入数据库,然后在另一个选项卡中打开文件,而不必使用窗口。open@SamCromer如果不想创建自己的HttpHandler,只需将链接更改为链接按钮,在回发时执行所需的代码,并将用户重定向到文档。否则,考虑一下。@ MikeSmithDev,这就是我目前正在做的事情,但是弹出式拦截器正在破坏聚会,Safari甚至没有给出警告它只是不起作用。下面是我所做的:受保护的void AccessFile_Click(objectsender,EventArgs e){在所有版本的Safari字符串newWindowUrl=“pdf/Newsletter01.pdf#zoom=100”;string javaScript=“\n”+“\n”+“\n”;this.RegisterStartupScript(“,javaScript)}HTML-是的,我考虑过做响应。重定向,但我不想让他们离开网站。如果打开一个新窗口不是一个选项,保持它们在同一个选项卡/页面不是一个选项。。。。你打算做什么?我想我在之前的帖子中提到,我需要的是新的标签。重定向会在同一个标签/窗口中打开,这不是一个选项。“在另一个选项卡中打开文件,而不必使用window.open”@SamCromer,这不是很清楚。我知道你已经接受了另一个答案,但是这里有一个选项,我认为使用起来有点容易,因为你不会在社区中使用IDS等等。你可以考虑使用Couth.AppultStascCytoRealQuestReST而不是CordExt.Revest.Enter。有关更多信息,请参阅这些链接,关于结束请求的建议,以及如何使用CompleteRequest而不发送不需要的数据-是的,我考虑过进行响应。重定向,但我不希望他们离开网站。如果打开新窗口不是一个选项,并且将它们保留在同一选项卡/页面中不是一个选项。。。。你打算做什么?我想我在之前的帖子中提到,我需要的是新的标签。重定向会在同一个标签/窗口中打开,这不是一个选项。“在另一个选项卡中打开文件,而不必使用window.open”@SamCromer,这不是很清楚。我知道你已经接受了另一个答案,但是这里有一个选项,我认为使用起来有点容易,因为你不会在社区中使用IDS等等。你可以考虑使用Couth.AppultStascCytoRealQuestReST而不是CordExt.Revest.Enter。有关更多信息,请参阅这些链接,关于结束请求的建议,以及如何使用CompleteRequest而不发送不需要的数据,感谢这是我的目的,我以前没有使用过FileHandler,我想知道它是否能解决这个问题。谢谢是的,这个问题已经存在了一段时间,ashx将很容易解决您的问题。谢谢这是我的意思,我以前没有使用过文件处理程序,我想知道它是否能解决这个问题。谢谢是的,这个问题已经存在了一段时间,ashx会很容易解决你的问题。