如何解决正在下载一个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\");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。