2011-05-30 63 views
1

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

在过去,我已经使用了一个Web客户端要做到这一点:

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

但看起来这仅仅是能够下载HTML页面。

可以这样做吗?

+0

为什么这标志着下来?看起来像一个公平和明确的问题。 – Urbycoz 2011-06-06 07:37:43

回答

3

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

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

+0

我明白了。你能提出一个更好的方法或解决方法吗? – Urbycoz 2011-05-30 15:27:43

+0

除非您有权访问服务器,否则您无法使用 – 2011-05-30 16:00:31

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"); 
    } 
} 
+0

-1,因为使用VB.NET标记时遇到了C#解决方案 – Predator 2011-06-04 00:45:59