C# ASP.NET中的静态文件服务

C# ASP.NET中的静态文件服务,c#,asp.net,file,download,binaryfiles,C#,Asp.net,File,Download,Binaryfiles,我只是想把一个pdf文件放到我的解决方案的文件夹中,让用户在我的网站上下载。很简单 我有一个主.aspx页面,其中包含指向另一个.aspx页面的静态链接,我正在使用该页面下载文件。如果我直接从VisualStudio中运行下载页面,则代码可以工作,但是如果我运行主页并单击指向此页面的按钮,则代码无法工作。以下是下载页面的代码: FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));

我只是想把一个pdf文件放到我的解决方案的文件夹中,让用户在我的网站上下载。很简单

我有一个主.aspx页面,其中包含指向另一个.aspx页面的静态链接,我正在使用该页面下载文件。如果我直接从VisualStudio中运行下载页面,则代码可以工作,但是如果我运行主页并单击指向此页面的按钮,则代码无法工作。以下是下载页面的代码:

FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));            
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/pdf";;
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.BinaryWrite((byte[])File.ReadAllBytes(Server.MapPath("~/Workflow/Workflow v3.pdf")));
Response.Flush();
Response.End();
仅供参考。。这里是另一个下载页面,我正在我的工具的另一个区域使用。这个页面实际上接受一个参数并点击数据库以获取存储在数据库中的文件。这段代码确实有效,但我不想在我的“工作流”下载页面上这样做

        ...
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = AgreementDocumentTable.Rows[0]["ContentType"].ToString();
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + AgreementDocumentTable.Rows[0]["Title"].ToString());
        Response.BinaryWrite((byte[])AgreementDocumentTable.Rows[0]["AgreementDocument"]);
        Response.Flush();
        Response.End();

我找到了这个答案,解释了不应该使用Response.End()而应该使用CompleteRequest()方法


我找到了这个答案,解释了不应该使用Response.End()而应该使用CompleteRequest()方法


通过调用javascript函数并使用ScriptManager.RegisterClientScriptBlock实现了这一点

这项工作(不知道100%的原因,想得到一个解释),所以我要用它

标记:

<a runat="server" id="WorkflowDownloadLink" onserverclick="DownloadWorkflowLink_Click" href="">
Workflow.aspx上的代码隐藏:

protected void Page_Load(object sender, EventArgs e)
    {

        FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));

        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
        Response.BinaryWrite((byte[])File.ReadAllBytes(Server.MapPath("~/Workflow/Workflow v3.pdf")));
        Response.Flush();



    }

通过调用javascript函数并使用ScriptManager.RegisterClientScriptBlock实现了这一点

这项工作(不知道100%的原因,想得到一个解释),所以我要用它

标记:

<a runat="server" id="WorkflowDownloadLink" onserverclick="DownloadWorkflowLink_Click" href="">
Workflow.aspx上的代码隐藏:

protected void Page_Load(object sender, EventArgs e)
    {

        FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));

        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
        Response.BinaryWrite((byte[])File.ReadAllBytes(Server.MapPath("~/Workflow/Workflow v3.pdf")));
        Response.Flush();



    }

你需要更清楚“不起作用”。断点会被击中吗?有例外吗?它在响应时中断。结束();System.Web.dll中发生“System.Web.HttpException”类型的异常,但未在用户代码中处理其他信息:远程主机关闭了连接。错误代码是0x80070057。我知道Response.End()会根据设计引发异常。但仍然没有下载。你需要更清楚地知道“不起作用”。断点会被击中吗?有例外吗?它在响应时中断。结束();System.Web.dll中发生“System.Web.HttpException”类型的异常,但未在用户代码中处理其他信息:远程主机关闭了连接。错误代码是0x80070057。我知道Response.End()会根据设计引发异常。但是仍然没有下载。很抱歉,这没有帮助。我彻底阅读了你的两个链接,并尝试了一些不同的东西,这些帖子中的信息,但都不起作用。我收到相同的“远程主机已关闭连接”错误。很抱歉,这没有帮助。我彻底阅读了你的两个链接,并尝试了一些不同的东西,这些帖子中的信息,但都不起作用。我得到相同的“远程主机关闭了连接。”错误。