2009-10-16 61 views
0

本质上,我有一个img标记,src属性/ChartImg.axd?i=chart_0_0.png&g=06469eea67ea452b977f8e73cad70691。我是否需要创建另一个WebRequest来获取此资源的内容,还是有一种更简单的方法?如何刮取axd资源的内容?

我正在抓取当前请求的输出。以下是我到目前为止...

本质上,我的additionaAssets将在某些情况下包含一个.axd资源的相对Uri。我想将这些内容包含在我正在构建的档案中。

private void ProcessPrintRequest() 
    { 
     this.Response.Clear(); 
     this.Response.ContentType = "application/zip"; 
     this.Response.AddHeader("Content-Disposition", "attachment;filename=archive.zip"); 

     using (var stream = new ZipOutputStream(new ZeroByteStreamWrapper(this.Response.OutputStream))) 
     { 
      stream.SetLevel(9); 

      var additionalAssets = new PathNormailzationDictionary(); 

      this.ExportDocument(stream, additionalAssets); 
      this.ExportAdditionalAssets(stream, additionalAssets); 
     } 

     this.Response.End(); 
    } 

    private void ExportAdditionalAssets(ZipOutputStream stream, PathNormailzationDictionary additionalAssets) 
    { 
     var buffer = new byte[32 * 1024]; 
     int read; 

     // TODO: Request content of .axd resources 
     foreach (var item in additionalAssets.Where(item => File.Exists(Server.MapPath(item.Key)))) 
     { 
      var entry = new ZipEntry(item.Value); 

      stream.PutNextEntry(entry); 

      using (var fileStream = File.OpenRead(Server.MapPath(item.Key))) 
      { 
       while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        stream.Write(buffer, 0, read); 
       } 
      } 
     } 
    } 

    private void ExportDocument(ZipOutputStream stream, PathNormailzationDictionary additionalAssets) 
    { 
     var entry = new ZipEntry("index.html"); 

     stream.PutNextEntry(entry); 

     var document = this.GetNormalizedDocument(additionalAssets); 

     var writer = new StreamWriter(stream); 
     writer.Write(document); 
     writer.Flush(); 
    } 

    private string GetNormalizedDocument(PathNormailzationDictionary additionalAssets); 

回答

2

是的,你必须创建另一个的WebRequest。任何给定的HTML页面都由多个http请求组成;一个用于html页面,另一个用于每个外部SRC。没有摆脱它。

-Oisin