2009-10-27 2 views
1

Я пытаюсь сделать простой HTTP-пост конечной точкой с ТОЛЬКО аргументами URL.Выполнение HTTP POST в конечной точке REST

По крайней мере, вот как я понимаю следующие инструкции:

POST на этот адрес с одним параметром с именем URL, адрес канала, который изменяется.

Как и в случае с методом XML-RPC, он проверяет, что канал был изменен, и если он уведомляет подписчиков.

Мероприятие зарегистрировано. Возвращаемое значение представляет собой XML-сообщение с именем result, с двумя атрибутами, успехом и msg.

Это мой код в настоящее время:

 public static void ping(string feed) 
    { 
     HttpWebResponse response = MakeRequest(feed); 
     XmlDocument document = new XmlDocument(); 

     document.Load(response.GetResponseStream(); 
     string success = document.GetElementById("success").InnerText; 
     string msg = document.GetElementById("msg").InnerText; 

     MessageBox.Show(msg, success); 
    } 
     private static HttpWebResponse MakeRequest(string postArgument) 
    { 
     string url = path + "?" + UrlEncode(postArgument); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     return (HttpWebResponse)request.GetResponse(); 
    } 
    private static string UrlEncode(string value) 
    { 
     string result; 
     result= HttpUtility.UrlEncode("url") + "=" + HttpUtility.UrlEncode(value); 
     return result; 
    } 

Я получаю неправильный ответ от сервера, так что я предполагаю, что я делаю это неправильно как-то. вот ответ:

Неверный на верхнем уровне документа. Обработка ресурсов «файл Ошибка: /// C: /Users/ADMIN/AppData/Local/Temp/VSD1.tmp.XML ...

Рю ^

Любые идеи ??

Заранее спасибо

+0

Какой ответ вы получаете с сервера? –

ответ

1

Вот код, который я нашел, чтобы работать.

Мы используем HTTP POST, параметры кодирования в теле потока. Это дает нам «url-foobar» как тело контента. Нет типов контента, диспозиций, границ и т. Д. В теле.

 private static HttpWebResponse MakeRequest(string path, string postArgument) 
    { 
     //string url = path + "?" + UrlEncode(postArgument); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(path); 

     request.Method = "POST"; 
     string boundary = Guid.NewGuid().ToString().Replace("-", ""); 
     request.ContentType = "multipart/form-data; boundary=" + boundary; 
     Stream stream = request.GetRequestStream(); 
     string result = string.Format("url={0}", postArgument); 
     byte[] value = Encoding.UTF8.GetBytes(result); 
     stream.Write(value, 0, value.Length); 
     stream.Close(); 

     return (HttpWebResponse)request.GetResponse(); 
    } 
     public static void ping(string server, string feed) 
    { 
     HttpWebResponse response = MakeRequest(server, feed); 
     XmlDocument document = new XmlDocument(); 
     string result = GetString(response.GetResponseStream()); 
     try 
     { 
      document.LoadXml(result); 
     } 
     catch 
     { 
      MessageBox.Show("There was an error with the response", "Error"); 
     } 
     //MessageBox.Show(msg, success); 

    } 
    public static string GetString(Stream thestream) 
    { 
     int n = thestream.ReadByte(); 
     byte[] bytes = new byte[n]; 
     thestream.Read(bytes, 0, n); 
     return Encoding.ASCII.GetString(bytes); 
    } 

Звонки в GetString предназначены только для целей отладки и не являются обязательными.

Спасибо всем, кто звонил сюда, чтобы поставить меня на правильный путь.

1

Я не знаю API в .NET, но: Я понимаю, инструкции как: «выполнить запись на URL с аргументами запроса», а пост орган должен иметь url = foobar.

IOW: вместо того, чтобы принимать postArgument и присоединять его к URL-адресу, вы должны вызвать URL-адрес и предоставить правильно закодированный url = foobar в теле сообщения.

Кроме того: я не вижу, что вы устанавливаете заголовок запроса «Принять», что может быть важно, если сервер использует это для распознавания формата ответа.

1

Лучший способ сделать сообщение в форме в .NET - использовать класс WebClient. Этот класс будет делать правильную вещь для отправки данных, либо как POST (с параметрами в сущности), либо как GET (с параметрами, закодированными как аргументы строки запроса).

И вы должны показать нам фактическое исключение, которое клиент дает обратно, для того, чтобы выяснить, что случилось ..

Смежные вопросы