web-dev-qa-db-fra.com

Données post XML XML en C #

J'ai besoin de poster des données XML HTTP vers une URL comportant Textarea avec le nom XMLdata. Mes données XMl sont prêtes et se trouvent dans XDocument Sendingxml = xml; mais le code postal que j'ai essayé ne fonctionne pas. Principalement parce que je ne sais pas comment mettre les données XML dans la variable postData, car elle n'accepte que des chaînes. Ceci est mon code:

        XDocument Sendingxml = xml;

        //  string Sendingxml = "<?xml version=1.0 encoding=UTF-8> <PluginData> <Credential UserName=avosfieldagent01 AuthenticationToken=61cc3957744742dca238c4dd7cbca702 /><Session><PropertyAddress>5 Crosskey</PropertyAddress><PropertyAddress2/><PropertyCity>California</PropertyCity><PropertyState>CA</PropertyState><PropertyZip>92620</PropertyZip><PropertyType>Condo</PropertyType><SourceReferenceId>45643</SourceReferenceId><SessionId>2013070100158346</SessionId><SessionCompleteReturnURL/><CustomerId/><BluebookOrderCheckSum>681a598cf23f412095f6092c281823e6</BluebookOrderCheckSum><BluebookOrderId>11160</BluebookOrderId> </Session></PluginData>";

        // Create a request using a URL that can receive a post. 
        WebRequest request =
            WebRequest.Create("https://test.bluebookcva.net/order/testdirectplugin/3");
        // Set the Method property of the request to POST.
        request.Method = "POST";

        // Create POST data and convert it to a byte array.
        string postData = "XMLData=" + Sendingxml;    //My problem is here as I need postData  as XDocument.


        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";
        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length;
        // Get the request stream.
        Stream dataStream = request.GetRequestStream();
        // Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length);
        // Close the Stream object.
        dataStream.Close();
        // Get the response.
        WebResponse response = request.GetResponse();
        // Display the status.
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        // Display the content.
        Console.WriteLine(responseFromServer);
        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();
32
Alma

En général:

Un exemple de moyen facile de publier des données XML et d'obtenir la réponse (sous forme de chaîne) serait la fonction suivante:

public string postXMLData(string destinationUrl, string requestXml)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
    byte[] bytes;
    bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
    request.ContentType = "text/xml; encoding='utf-8'";
    request.ContentLength = bytes.Length;
    request.Method = "POST";
    Stream requestStream = request.GetRequestStream();
    requestStream.Write(bytes, 0, bytes.Length);
    requestStream.Close();
    HttpWebResponse response;
    response = (HttpWebResponse)request.GetResponse();
    if (response.StatusCode == HttpStatusCode.OK)
    {
        Stream responseStream = response.GetResponseStream();
        string responseStr = new StreamReader(responseStream).ReadToEnd();
        return responseStr;
    }
    return null;
}

Dans votre situation spécifique:

Au lieu de:

request.ContentType = "application/x-www-form-urlencoded";

utilisation:

request.ContentType = "text/xml; encoding='utf-8'";

En outre, supprimez:

string postData = "XMLData=" + Sendingxml;

Et remplace:

byte[] byteArray = Encoding.UTF8.GetBytes(postData);

avec:

byte[] byteArray = Encoding.UTF8.GetBytes(Sendingxml.ToString());
86
AlliterativeAlice

L'exemple d'AlliterativeAlice m'a énormément aidé. Dans mon cas, cependant, le serveur auquel je parlais n'aimait pas avoir des guillemets simples autour de utf-8 dans le type de contenu. Il a échoué avec un "Server Error" et il a fallu des heures pour comprendre ce qui ne plaisait pas:

request.ContentType = "text/xml; encoding=utf-8";
4
ClaytonQ