我正在创建一个显示特定文件夹中文件列表的功能,并允许用户下载,但我遇到错误,指出:
“System.Web.dll中出现'System.ArgumentNullException'类型的异常,但未在用户代码中处理,{”值不能为空。\ r \ nParameter name:filename“}”
声明中:
context.Response.WriteFile(context.Request.QueryString["files"]);
我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string[] files = Directory.GetFiles(@"C:\temp");
rpt.DataSource = files;
rpt.DataBind();
}
}
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
string file = e.Item.DataItem as string;
HyperLink hyp = e.Item.FindControl("hyp") as HyperLink;
hyp.Text = file;
hyp.NavigateUrl = string.Format("~/Handlers/FileHandler.ashx?file={0}\n" , file);
}
}
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.Buffer = true;
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + context.Request.QueryString["files"]);
context.Response.WriteFile(context.Request.QueryString["files"]);
context.Response.End();
}
}
答案 0 :(得分:1)
尝试使用Request.QueryString(files)
答案 1 :(得分:0)
可能是拼写错误,但您在ItemDataBound中的代码是
hyp.NavigateUrl = string.Format("~/Handlers/FileHandler.ashx?file={0}\n" , file);
您在此处设置查询字符串参数'文件'
在您的处理程序中,您正在访问'文件的ProcessRequest方法。参数
context.Response.WriteFile(context.Request.QueryString["files"]);
尝试将此更改为
context.Response.WriteFile(context.Request.Params["file"]);