下载aspx页面

时间:2011-05-30 15:14:34

标签: asp.net vb.net download

在我的网络应用程序中,我有一个aspx页面,其中包含一个html表和几行文本。我需要用户能够将整个页面作为单独的文件下载。

在过去,我使用了一个webclient来执行此操作:

Dim myWebClient As New System.Net.WebClient
myWebClient.DownloadFile(strSource, strDest)
Response.AddHeader("Content-Disposition", "attachment;filename=test.doc")
Response.Write("test.doc")

但似乎这只能下载html页面。

可以这样做吗?

2 个答案:

答案 0 :(得分:3)

您只能下载HTML的原因是 .aspx不通过互联网提供(仅生成HTML)。

当您执行myWebClient.DownloadFile()时,应用程序只是向URI发出GET请求并保存生成的HTML。 .aspx永远不会离开服务器 - 而是处理服务器端,导致你最终得到的HTML。

答案 1 :(得分:1)

.ASPX是一个脚本页面,因此您无法实际下载原始ASPX。另一端的IIS服务器有一个.aspx处理程序,导致.NET处理它。通常,您不希望服务器返回原始ASPX源。

在服务器端需要特殊处理才能获得原始ASPX页面。例如,您可以创建一个为您执行此操作的ASHX脚本处理程序,您可以请求类似getfile.ashx?filename=myfile.aspx的内容,并且getfile.ashx处理程序将从磁盘读取ASPX页面并将其写为响应。 (安全说明:如果这是您选择的路由,请确保清理指定的页面,以便它们不会像getfile.ashx?filename=C:\my\secret\file.txt那样做一些愚蠢的事情。将该处理程序的信任级别设置为更好中等或更低。

但这一切都需要服务器端开发。从客户端来看,在服务器想要播放之前,您无法做任何事情。

以下是文件处理程序的示例:

public class MyHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        var file = context.Request.QueryString["file"];
        //Make sure to do your security checks on the file path here.
        using (var source = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            source.CopyTo(context.Response.OutputStream);
        }
    }
}

您可以在ASHX内部或通过web.config中的httpHandlers部分设置处理程序。

或者,如果您使用的是MVC2 +,则不需要HTTP处理程序,因为您只需使用操作即可实现相同的操作:

public ActionResult GetFile(string path)
{
    //Make sure to do your security checks
    using (var source = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        return File(source, "text/html");
    }
}