Публикация в веб-сервис REST из .NET?

#c# #.net #web-services #rest

#c# #.net #веб-сервисы #rest

Вопрос:

Я пытался запустить веб-сервис, используя приведенные здесь инструкции:

http://help.seeclickfix.com/kb/api/creating-an-issue

Я придумал приведенный ниже код:

         string paramContent = "api_key=afs684eas3ef86saef78s68aef68saeamp;issue[summary]=abeTestamp;issue[lat]=39.26252982783172amp;issue[lng]=-121.01738691329956amp;issue[address]=111 Abe St., Nevada City, CA";
        byte[] paramBytes = Encoding.UTF8.GetBytes(paramContent);
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://seeclickfix.com/api/issues.xml");
        req.Method = "POST";
        req.ContentLength = paramBytes.Length;
        //req.ContentType = "application/x-www-form-urlencoded";

        using (Stream reqStream = req.GetRequestStream())
        {
            reqStream.Write(paramBytes, 0, paramBytes.Length);
        }

        using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse()) //HERE!
        {
            if (resp.StatusCode != HttpStatusCode.OK)
            {
                string message = String.Format("POST failed. Received HTTP {0}", resp.StatusCode);
                throw new ApplicationException(message);
            }

            StreamReader sr = new StreamReader(resp.GetResponseStream());
            string response = sr.ReadToEnd();

            Console.WriteLine(response   System.Environment.NewLine);
        }
  

Но в строке с HERE! комментарием он выдает ошибку:

 The remote server returned an error: (500) Internal Server Error.
  

Может ли кто-нибудь увидеть какие-либо проблемы с тем, как я пытаюсь это реализовать?

Ответ №1:

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

Проблема может заключаться в ошибке на сервере или в проблеме с содержимым вашего запроса, который сервер не может обработать. (В любом случае сервер не может предоставить действительное сообщение об ошибке, как предполагает их документация)

Вы должны начать с того, что убедитесь, что содержимое вашего запроса является действительным. Смотрите пример на URL seeclickfix, который вы опубликовали. Попробуйте напрямую опубликовать с помощью curl, как они показывают, но используйте содержимое вашего собственного сообщения следующим образом:

curl -v -d ‘api_key=afs684eas3ef86saef78s68aef68saeamp;issue[summary]=abeTestamp;issue[lat]=39.26252982783172amp;issue[lng]=-121.01738691329956amp;issue[address]= Ул. Эйба, 111, Невада-Сити, Калифорния’ http://seeclickfix.com/api/issues.xml

Я ожидаю, что вы все равно получите ошибку 500 (я только что попробовал это, и я получил ошибку 500).

В итоге, похоже, что их api сломан, а не ваша логика.

Ответ №2:

Вы не сделали ничего плохого. Я попытался выполнить запрос с помощью Fiddler, и он вернул тот же код состояния 500.

Если с переданными вами данными было что-то не так, то они должны были вернуть код ответа 4XX.