正在下载一个aspx页面

问题描述

| 在我的Web应用程序中,我有一个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页面。 能做到吗?     

解决方法

        您只能下载HTML的原因是因为.aspx不能通过Internet提供(只有生成的HTML可以提供)。 当您执行“ 1”操作时,应用程序只是向URI发出GET请求并保存生成的HTML。 .aspx永远不会离开服务器-而是在服务器端进行处理,导致最终生成HTML。     ,        .ASPX是一个脚本页面,因此您实际上无法下载原始ASPX。另一端的IIS服务器具有用于.aspx的处理程序,该处理程序由.NET处理。通常,您不希望服务器返回原始ASPX源。 它将需要在服务器端进行特殊处理才能获得原始的ASPX页面。例如,您可以创建一个为您执行此操作的ASHX脚本处理程序,您将请求诸如
getfile.ashx?filename=myfile.aspx
之类的内容,而getfile.ashx处理程序将从磁盘上读取ASPX页并将其作为响应写入。 (安全说明:如果这是您选择的路由,请确保对指定的页面进行清理,以免他们做ѭ3之类的愚蠢的事情。)最好将该处理程序的信任级别设置为中或更低。 但这一切都需要服务器端开发。从客户端来看,直到服务器想玩为止,您无能为力。 这是文件处理程序的示例:
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,FileShare.Read))
    {
        return File(source,\"text/html\");
    }
}