使用 HttpHandler 下载 .zip 目录

Dowloading a .zip directory with HttpHandler

我目前在使用 HttpHandler 时遇到了问题(第一次使用)。基本上我正在动态生成一个 .zip 文件夹以供下载。我正在将一个 ID(使用 Guid 生成)传递给我的处理程序以检查该文件夹是否存在并下载它或引发异常。

据我所知,使用处理程序应该可以完成这项工作,但我无法解决这个问题。下面是我到目前为止编写的代码,首先是对处理程序的调用,然后是处理程序本身

<a href="MyHandler.ashx?requestID=@requestID" target="_blank">


<%@ WebHandler Language="C#" Class="MyHandler" %>

using System;
using System.Web;
using System.IO;
using System.Web.Hosting;

public class MyHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        var id = context.Request.QueryString["requestID"];
        var dirPath = new DirectoryInfo(Path.Combine(HostingEnvironment.MapPath("~/App_Data/") + id + ".zip"));

        if (dirPath.Exists)
        {
            context.Response.ContentType = "application/octet-stream";
            context.Response.AppendHeader(HostingEnvironment.MapPath("~/App_Data/"), "attachment;filename=" + id+".zip");            
        } 
        else
            throw (new HttpException("404"));
    }

    public bool IsReusable
    {
        get { return false; }
    }

}

我只需要下载这个.zip 目录。打开动态生成的错误时出现 404 错误,但目录已正确创建和压缩。我是不是用错方法了?

您可以只将 WebClient 用于 2 行:

using(Webclient wc = new WebClient())
{ 
   wc.DownloadFile(url, @"D:\downloads.zip");
}