【问题标题】:Posting to a REST webservice from .NET?从 .NET 发布到 REST Web 服务?
【发布时间】:2011-04-28 23:41:25
【问题描述】:

我试图使用此处的说明访问网络服务:

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.

任何人都可以看到我尝试实现此方法的任何问题吗?

【问题讨论】:

    标签: c# .net web-services rest


    【解决方案1】:

    您收到的 500 错误表示服务器有问题,不一定是您的代码有问题。您正在成功发送请求并收到响应。

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

    您应该首先确保您的请求内容有效。请参阅您发布的 seeclickfix 网址上的示例。尝试像他们展示的那样直接使用 curl 发布,但使用您自己的消息内容,如下所示:

    curl -v -d 'api_key=afs684eas3ef86saef78s68aef68sae&issue[summary]=abeTest&issue[lat]=39.26252982783172&issue[lng]=-121.01738691329956&issue[address]=111 Abe St., Nevada City, CA' @98765 >

    我希望您仍然会收到 500 错误(我刚刚尝试过,但收到了 500 错误)。

    底线,看起来他们的 api 坏了,而不是你的逻辑。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-22
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        • 2019-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多