Проблема с отправкой XML в Rest Service - PullRequest
0 голосов
/ 01 февраля 2012

Я работаю с веб-сервисом REST, который использует обычную аутентификацию и возвращает мне строку XML. Вот метод, который я использую, чтобы получить данные и вернуть их в виде XDocument:

        var req = (HttpWebRequest)WebRequest.Create(uri);
        String readToEnd;
        const string postData = "";
        var encoding = new ASCIIEncoding();
        byte[] byte1 = encoding.GetBytes(postData);

        req.Method = "POST";
        req.Timeout = 10000;
        req.ContentType = "text/XML";
        req.ContentLength = byte1.Length;

        string authInfo = userName + ":" + password;

        authInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(authInfo));
        req.Headers["Authorization"] = "Basic " + authInfo;

        var newStream = req.GetRequestStream();
        newStream.Write(byte1, 0, byte1.Length);
        newStream.Close();

        try
        {
            var resp = req.GetResponse();
            var answer = resp.GetResponseStream();
            var _answer = new StreamReader(answer);
            readToEnd = _answer.ReadToEnd();
            answer.Close();
        }
        catch (Exception ex)
        {
            readToEnd = null;
        }

        return readToEnd != null ? XDocument.Parse(readToEnd) : null;

Теперь, позже, я манипулировал этим XML и готов отправить его обратно в другой URI. Я бы подумал, что это будет тот же код, за исключением, может быть, размещения моей новой строки XML внутри переменной 'postData'?

Это правильный способ отправки строки XML в веб-сервис? Я смотрел, но, кажется, не могу пролить свет на это, когда используется базовая авторизация.

1 Ответ

1 голос
/ 01 февраля 2012

Я делаю следующее.Ключ в том, что вы должны записать свои данные в поток запросов перед публикацией.Надеюсь, это поможет.

 var request = CreateBaseRequest(body);
        HttpWebResponse WebResp = (HttpWebResponse)request.GetResponse();
        Stream Answer = WebResp.GetResponseStream();
        StreamReader response = new StreamReader(Answer);
        var r = response.ReadToEnd();

 static HttpWebRequest CreateBaseRequest(string postData)
    {

        var req = (HttpWebRequest)HttpWebRequest.Create(@"https://xyz.com/");

        req.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
        req.Method = "POST";
        req.KeepAlive = true;

        byte[] buffer = Encoding.ASCII.GetBytes(postData);

        req.ContentLength = buffer.Length;
        Stream PostData = req.GetRequestStream();
        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        return req;

    }
...