c# - 设计 - 记录用户下载

标签 c# asp.net webforms

我必须记录从网站抓取的每个文件的下载请求。此日志必须包含员工 ID、解决方案 ID、IP 地址。我用了很多方法 -

首先,我使用了一个模型来放置文件的路径 在 anchor 标记中。每当用户点击这个 anchor 标签时,我 正在生成 AJAX 请求以记录文件下载。

但这样做的最大缺点是用户只需复制文件并将其粘贴到单独的窗口中即可获取文件。这将确保不会记录下载。

其次, 当我在页面的 web 方法中处理 ajax 请求时。我尝试通过 HttpResponse 传输文件,但这也不起作用。

HttpContext.Current.Response.TransmitFile("文件名");

jQuery ajax 调用一直失败,我从未在客户端获取文件。

关键是,我必须在不刷新页面的情况下完成整个操作。

我想知道这是否可能...

最佳答案

您可以实现一个 IHttpHandler 来记录请求、检索文件并为其提供服务。这样,即使直接复制粘贴链接,它仍然会记录它。

public class SimpleHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        string fileToServe = context.Request.QueryString["file"];

        if (!string.IsNullOrEmpty(fileToServe))
        {
            //Log request here...

            context.Response.ContentType = "content type for your file here";
            context.Response.WriteFile("~/path/" + fileToServe);
        }
    }
}

关于c# - 设计 - 记录用户下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230651/

相关文章:

c# - Newtonsoft JSON 动态属性名称

c# - 为什么 gridview 行的颜色没有改变?

c# - 在 linq to sql c# 中获取具有一个 id 的两行

c# - WebForms 中的键盘快捷键

asp.net - 如何从 ASP.NET 应用程序发布推文

c# - lambda 表达式中的 SQL double 'IN' 子句

c# - Windows Phone 7 到 iPhone 开发(我知道倒退)

c# - 将数据表转换为 ienumerable<anonymous>?

c# - 从存储过程批量复制

javascript - 如何将 .js 文件添加到 ASP.NET 项目中的程序集