2009-10-16 59 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