为什么使用会话变量时值为空

本文关键字:变量 会话 为什么 | 更新日期: 2023-09-27 18:10:22

我有一个位于我的服务器之一的ASP.net网站,我从同一网络上的本地PC访问该网站。当应用程序运行时,它在C:'PDFFolder文件夹中保存一个PDF文件。我想显示一个链接,以便用户可以从服务器下载本地PC中的文件。

我正在使用一个会话变量作为文件名:

string strFileName = "completed_pdf_" + k + ".pdf"; //k is a variable within the function
Session["fileName"] = strFileName;

服务器端文件所在目录为:C:'PDFFolder'{filename}.pdf从本地PC访问该文件是:''myserver'PDFFolder'{filename}.pdf

下载按钮的代码是:

protected void DownloadFile(object sender, EventArgs e)
    {
        //MessageBox.Show(Session["pathName"].ToString());
        //MessageBox.Show(Session["fileName"].ToString());
        MessageBox.Show(Path.Combine(@"C:'PDFGenerate", Session["fileName"].ToString()).ToString());
        Response.Redirect("DownloadFilePDF.ashx?myvar=" + Session["fileName"].ToString());
    }

在下载文件的按钮上,我触发了HttpHandler函数onclick:

<%@ WebHandler Language="C#" Class="DownloadFilePDF" %>
using System;
using System.Web;
using System.IO;
public class DownloadFilePDF : IHttpHandler {
    public void ProcessRequest (HttpContext context) {
        System.Web.HttpRequest request2 = System.Web.HttpContext.Current.Request;
        string strSessVar2 = request2.QueryString["fileName"];
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "application/pdf";
        byte[] fileByteArray = File.ReadAllBytes(Path.Combine(@"C:'PDFGenerate", strSessVar2));
        response.AddHeader("Content-disposition", String.Format("attachment; filename={0}.pdf", strSessVar2));
        response.BinaryWrite(fileByteArray);
        response.End();
    }
    public bool IsReusable {
        get {
            return false;
        }
    }
}

我一直得到一个错误在这行:byte[] fileByteArray = File.ReadAllBytes(Path.Combine(@"C:'PDFGenerate", strSessVar2));

错误是:Value cannot be null

如何解决这个问题?

为什么使用会话变量时值为空

我想你的问题是这一行:

string strSessVar2 = request2.QueryString["fileName"];

您想获得myvar:

的值
string strSessVar2 = request2.QueryString["myvar"];