【问题标题】:Download .aspx file from WebClient object从 WebClient 对象下载 .aspx 文件
【发布时间】:2013-02-21 11:56:25
【问题描述】:

我正在尝试使用 WebClient 对象从 Web 服务器下载“.aspx”文件并将其保存到文件系统,但它引发了“HTTP 500 内部错误”异常,我认为是因为服务器尝试呈现 html 并发送相同的内容而不是文件本身。

var objWebClient = new WebClient();    
var remoteUrl = "someserverURL" + "default.aspx";
objWebClient.DownloadFile(remoteUrl, localPathToSave);

尝试添加 HTTP 标头,但我认为它们可能不适用于来自桌面系统而不是浏览器的请求对象,已将服务器设置为以“应用程序/八位字节流”格式提供所有内容。

【问题讨论】:

  • 当您使用真实浏览器直接浏览该文件时,您会看到什么?该页面是否需要身份验证?
  • @ShadowWizard 抱歉忘了提到它会下载所有其他文件类型,即“.txt、.gif、.jpg”等。没有该页面不需要身份验证。基于浏览器的请求还提供错误页面“HTTP 500 Internal Error”
  • 所以这意味着页面有错误,你到底要下载什么?你不能“下载”源代码,这是黑客行为。
  • 我想将页面下载为内容而不是渲染,该页面不属于网站,它是一个简单而孤独的“.aspx”页面,需要由应用程序。
  • 就像我说的,答案也说,你不能那样做。带有.aspx 扩展名的文件正在由服务器呈现,除非您直接连接到 Web 服务器,否则您看不到其中的源代码,在这种情况下,您需要像阅读文本文件一样阅读它。

标签: c# .net


【解决方案1】:

你不能这样做。

如果网络服务器设置正确,它将不允许您直接下载 aspx 文件。

它下载所有其他文件(如 jpeg 和文本文件)的原因是 Web 服务器很乐意为这些文件类型提供服务并允许下载它们。

如果您尝试做的事情是可能的,那么任何人都可以下载任何 .net 站点的 aspx 源文件,这将是非常不安全的。

您可以做的是从 .aspx 页面获取呈现的 html 内容并保存。

var webClient = new WebClient();    
var remoteUrl = "someserverURL" + "default.aspx";
byte[] data = webClient.DownloadData(remoteUrl); 
var utf8Encoding = new UTF8Encoding(); 
var html = utf8Encoding.GetString(data);

//now you could save the html to a file

【讨论】:

  • 我认为您是正确的,但服务器上的页面只是一个页面(要下载的另一个内容,而不是网站的一部分),我相信建议的代码示例不起作用,它仍然抛出相同的错误“HTTP 500 内部错误”
  • 你能在网络浏览器中查看someserverUrl/default.aspx的渲染html吗?如果可以,那么您将无法以您尝试的方式下载它。
  • 假设您的网络服务器是 iis,如果您设置了 asp.net,那么 iis 将不允许下载 .aspx 文件,即使该页面不是网站的一部分。
  • 是的,Web 服务器是 IIS,我已经从它的映射中删除了为“.aspx”提供服务的处理程序,在这样做之后我也能够下载该文件。
猜你喜欢
  • 1970-01-01
  • 2015-12-30
  • 2015-02-26
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
相关资源
最近更新 更多