2011-04-28 110 views
3

我试图在这里使用说明打了一个Web服务:从.NET发布到REST Web服务?

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

我想出了下面的代码:

 string paramContent = "api_key=afs684eas3ef86saef78s68aef68sae&issue[summary]=abeTest&issue[lat]=39.26252982783172&issue[lng]=-121.01738691329956&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. 

任何人都可以看到任何问题,我试图实现t他?

回答

3

您收到的500错误表明服务器存在问题,而不一定是您的代码存在问题。您正在成功发送请求并收到回复。

问题可能是服务器中的错误,或者服务器无法处理的请求内容问题。 (无论哪种方式,服务器无法提供有效的错误消息,就像他们的文档所暗示的那样)

您应该首先确保请求的内容是有效的。请参阅您发布的seeclickfix网址上的示例。试着用卷曲直接张贴像他们展示,而是用自己的消息的内容,像这样:

卷曲-v -d“API_KEY = afs684eas3ef86saef78s68aef68sae &问题[摘要] = abeTest &问题[LAT] = 39.26252982783172 &问题[ LNG] = - 121.01738691329956 &问题[地址] = 111安倍晋三街,内华达城,CA” http://seeclickfix.com/api/issues.xml

我希望你还是会得到一个500错误(我只是尝试了,我得到了一个500错误)。

底线,它看起来像他们的API是破碎的,而不是你的逻辑。

0

你没有做错任何事。我尝试使用Fiddler发出请求,并返回相同的500状态码。

如果您传递的数据有问题,那么它们应该返回一个4XX响应代码。