XMLStencils арқылы WebClient Post арқылы XML жіберіңіз

Мен өзімнің жады ағымда жасалған 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);
2

3 жауаптар

EDIT: 2013 жылы редакцияланған, себебі бастапқыда жауап бергенде бұл дұрыс емес еді ...

Опциялар:

  • Take the byte array from the MemoryStream and use UploadData

    client.UploadData("http://test.com/test.aspx", ms.ToArray());
    
  • Use OpenWrite instead, and write to the stream returned

    using (var stream = client.OpenWrite("http://test.com/test.aspx"))
    {
        using (XmlWriter xml = XmlWriter.Create(stream, settings))
        {
            ...
        }
    }
    
  • Write the data to a file and then use UploadFile

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

Уақытша файлдан аулақ болу үшін, мен алғашқы екі тәсілдің біреуіне барамын.

9
қосылды
@too: Сіз дұрыссыз, мен бұған дейін Джимнің пікірін неге көрмегенімді білмеймін. Өңделеді.
қосылды автор Jon Skeet, көзі
@ user1040975: Сервер туралы көбірек білмесеңіз, сізге қосымша көмектесу мүмкін емес.
қосылды автор Jon Skeet, көзі
Мен бұл қалай жұмыс істейтінін түсінбеймін. UploadFile жүктеуді қай жерде анықтайды, ол ағынды екінші параметр ретінде пайдалануға мүмкіндік береді? Бұл кеңейтім әдісі ме?
қосылды автор Jim Counts, көзі
Мен Джиммен келісемін, UploadData әдісі қажет қолтаңба бар, бірақ ол шикізат деректерін жібереді.
қосылды автор too, көзі
Мен осы әдістерді және басқаларды сынап көрдім және серверден оның жарамсыз түрін айтатын дәйекті хабарлама алдым. Мен мазмұн түріндегі тақырыптарды қосу әрекетін жасадым және әлі күнге дейін қате аламын.
қосылды автор user1040975, көзі
Мен өз жұмысымды көрсету үшін жауапты жаңарттым, ал егер сіз өзіңізді қорқынышты сезсеңіз, жаңа сұрақ тудырды. stackoverflow.com/questions/37215257/…
қосылды автор user1040975, көзі

Жарамсыз дәлелдеріңізге :

Мен WebClient.UploadFile a> MemoryStream -ді қолдайды. MemoryStream дегенді String түрлендіріңіз және WebClient.UploadString .

6
қосылды

Мен де солай жасауға тырысамын. Мен бірнеше ықтимал шешімдерді пайдаланып көрдім, бірақ табысты болмады.

Келесі әдісті пайдаланған кезде 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);
        }
}
0
қосылды