簡體   English   中英

使用MemoryStream通過WebClient Post發送XML

[英]Send XML via WebClient Post using MemoryStream

我正在嘗試發送我在內存流中創建的XML文件。 當我嘗試使用UploadFile並獲得無效參數錯誤時,問題就出現了。 我的問題是,無論如何我可以使用我用WebClient.UploadFile創建的內存流來發送文件,還是我需要以其他方式執行此操作?

string firstname = Request.Headers["firstname"].ToString();
string lastname = Request.Headers["lastname"].ToString();
string organization = Request.Headers["organization"].ToString();
string phone = Request.Headers["phone"].ToString();

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter xml = XmlWriter.Create(ms, settings))
{
    xml.WriteStartDocument();
    xml.WriteStartElement("List");
    xml.WriteWhitespace("\n");

    xml.WriteStartElement("Employee");
    {
        xml.WriteElementString("First", firstname);
        xml.WriteElementString("Last", lastname);
        xml.WriteWhitespace("\n");
        xml.WriteElementString("Organization", organization);
        xml.WriteElementString("Phone", phone);
    }

    xml.WriteEndElement();
    xml.WriteEndDocument();
}

WebClient client = new WebClient();

client.UploadFile("http://test.com/test.aspx", ms);

編輯:2013年編輯,因為當我最初回答時看起來完全錯了...

選項:

  • MemoryStream獲取字節數組並使用UploadData

     client.UploadData("http://test.com/test.aspx", ms.ToArray()); 
  • 改為使用OpenWrite ,並寫入返回的流

     using (var stream = client.OpenWrite("http://test.com/test.aspx")) { using (XmlWriter xml = XmlWriter.Create(stream, settings)) { ... } } 
  • 將數據寫入文件,然后使用UploadFile

     using (XmlWriter xml = XmlWriter.Create("tmp.xml", settings)) { ... } client.UploadFile("http://test.com/test.aspx", "tmp.xml"); // Delete temporary file afterwards 

我個人會采用前兩種方法之一,以避免臨時文件。

根據您的Invalid Arguments

我沒有在WebClient上看到任何方法.UploadFile支持MemoryStream MemoryStream轉換為String並使用WebClient.UploadString

我也是想做同樣的事情。 我嘗試過使用幾種可能的解決方案,但沒有成功。

當我嘗試使用以下方法時,api獲取請求,因為字符串文件名具有正確的值,但請求對象的內容為空...

using (FileStream src = System.IO.File.Open(@"C:\XML\OrderXML.txt", FileMode.Open))
            {
                src.CopyTo(ms);
            }

            using (WebClient wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.ContentType] = "text/xml";
                wc.Headers[HttpRequestHeader.AcceptEncoding] = "Encoding.UTF8";
                //wc.Headers[HttpRequestHeader.ContentLength] = ms.Length.ToString();                    
                wc.UploadString(sURL, ms.ToString());
            }

我的RESTful API MVC控制器:

 [System.Web.Http.HttpPost]
    public async void CreateJob(string filename)
    {
        string success = "false";
        try
        {
            //XDocument doc = XDocument.Load
            XmlSerializer xmls = new XmlSerializer(typeof(PdnaXmlParse));
            Stream reqStream = await Request.Content.ReadAsStreamAsync();
            PdnaXmlParse res = (PdnaXmlParse)xmls.Deserialize(new XmlTextReader(reqStream));
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM