2017-01-13 11 views
-1

をダウンロードします。XMLデータをユーザーのブラウザにダウンロードしてダウンロードしています。 は、以下のコードであるXMLファイルをユーザーブラウザに書き込んで、

(XElementのXmlCustomerData) は{

 try 
     { 
      if (XmlCustomerData != null) 
      { 

       XDocument x = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), new XElement(XmlCustomerData)); 
       StringBuilder builder = new StringBuilder(); 
       StringWriter writer = new StringWriter(builder); 

       x.Save(writer); 
       writer.Flush(); 
       HttpContext context = HttpContext.Current; 
       context.Response.Write(builder.ToString().Replace("encoding=\"utf-16\"", "encoding=\"utf-8\"")); 
       context.Response.ContentType = "application/xml"; 
       string filename = "CustomerDetails "; 
       context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ".xml"); 
       context.Response.AppendHeader("Connection", "close"); 
       context.Response.End(); 

      } 

     } 
     catch (Exception ex) 
     { 
      Log("Exception in CustomerData" + ex.Message.ToString(), this); 
     } 
    } 

XmlCustomerDataはXElementオブジェクト(いくつかのビジネスロジック...)によって作成されたXMLが含まれてい 以下はXMLのサンプルは

を必要とされる保護のボイドWriteXmlToPageDownload
<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Customers> 
    <Customer> 

<deatils name="ABC"> 
    <id="1"> 
    </details> 
<deatils name="XYZ"> 
    <id="2"> 
</details> 
    ... 
</Customer> 
</Customers> 

とXmlCustomerDataは完全に保持するためのビジネスロジックが含まれてい

<Customers>...</Customers> 

問題は次のとおりです。 1.XMLが作成されていて、ユーザーブラウザにダウンロードされていません。 2.例外が発生しました "コードが最適化されているかネイティブフレームが呼び出しスタックの上にあるため、式を評価できません。

私の要件は、XMLファイルをユーザーのブラウザにダウンロードすることです。 私がやっている間違いやもっと良いことを教えてください。

ありがとうございます。

答えて

1

あなたがコード

StringBuilder builder = new StringBuilder(); 
StringWriter writer = new StringWriter(builder); 

x.Save(context.Response.OutputStream); 

類似したコードの迅速なモックアップに置き換えることができ、その後XDocumentにXMLデータをロードした後、以下のコードをダウンロードしますユーザーが添付ファイルを保存または開くように求められた後に、xmlコンテンツが表示されます。このコードは、HTTPハンドラのashxファイルに含まれています。

/// <summary> 
/// Summary description for Handler1 
/// </summary> 
public class Handler1 : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     string xml = 
      @"<?xml version=""1.0""?> 
      <Customers> 
       <Customer> 
        <details> 
         <id/> 
        </details> 
        <details> 
         <id/> 
        </details> 
       </Customer> 
      </Customers>"; 

     XElement xel = XElement.Parse(xml); 
     XDocument x = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), new XElement(xel)); 

     context.Response.ContentType = "application/xml"; 
     context.Response.AppendHeader("Content-Disposition", "attachment; filename=Test.xml"); 
     context.Response.AddHeader("Content-Length", xml.Length.ToString()); 
     x.Save(context.Response.OutputStream); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

このコードは、XMLをWebページに直接表示します。このコードは、HTTPハンドラのashxファイルに含まれています。

/// <summary> 
/// Summary description for Handler2 
/// </summary> 
public class Handler2 : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     string xml = 
      @"<?xml version=""1.0""?> 
      <Customers> 
       <Customer> 
        <details> 
         <id/> 
        </details> 
        <details> 
         <id/> 
        </details> 
       </Customer> 
      </Customers>"; 

     XElement xel = XElement.Parse(xml); 
     XDocument x = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), new XElement(xel)); 

     context.Response.ContentType = "application/xml"; 
     context.Response.AddHeader("Content-Length", xml.Length.ToString()); 
     x.Save(context.Response.OutputStream); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 
関連する問題