Recurly PUT请求工作但返回服务器错误

我在C#/ .NET中实现了Recurly API( http://docs.recurly.com/api ),尽管缺乏对.NET的.NET支持,但它到目前为止还是非常好。

我已成功实现了大部分API,但遇到了使用PUT请求修改或更新用户帐户的问题。

我的GET和POST请求工作得很好,我收到httpStatusCode 200用于帐户创建,并接收适用于我’GET’的任何数据的XML。

但是,当我尝试使用PUT请求重新激活订阅时,Recurly 的订阅会按照请求重新激活,但我得到的响应是http状态代码500:

The server encountered an error while processing your request and failed. 

我相信这个问题与下面定义request.ContentLength = 0;代码有关request.ContentLength = 0; 但随后没有指定或发送请求的实际内容。

在定义ContentLength = 0 ,订阅不会被重新激活,我将得到411 Length Required错误(因此我添加了内容长度)。

文档没有说明在PUT请求中指定任何实体(我认为这是正确的术语),只是向适当的URI发送一个 put请求。

我有点陷入僵局,并尝试合并一个空白字符串,XML文件(重新订阅订阅细节)与请求一起发送,但我似乎什么也得不到,但错误返回。

我不知道,因为我不知道PUT请求中的实体对Recurly的要求是什么,并且只要ContentLength被定义,它对我没有任何意义,因为我在印象中虽然在做了一些研究后我发现有些人提到这可能没有必要,但PUT需要一个身体作为POST。

尽管实际请求在Recurly中工作,但我无法在其余代码中获得validation所需的响应(httpStatusCode 200)。

是否可以发送空白字符串或内容长度为0的空体并且不会出现服务器错误,或者我是否需要以某种方式找到要发送到Recurly的请求以返回可接受的响应状态代码,尽管后者这似乎是多余的,因为无论如何重新激活订阅。

 uri = "https://" + subdomain + ".recurly.com/v2/subscriptions/" + uuid + "/reactivate"; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Headers.Add("Authorization", "Basic " + encodeB64); request.Method = "PUT"; request.ContentType = "text/XML"; request.ContentLength = 0; } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

编辑:我尝试过的其他内容示例

 uri = "https://" + subdomain + ".recurly.com/v2/subscriptions/" + uuid + "/reactivate"; try { string xml = "now"; //also tried with blank string. byte[] arr = System.Text.Encoding.UTF8.GetBytes(xml); HttpWebRequest renewRequest = (HttpWebRequest)WebRequest.Create(uri); renewRequest.Headers.Add("Authorization", "Basic " + encodeB64); renewRequest.Method = "PUT"; renewRequest.ContentType = "text/XML"; renewRequest.ContentLength = arr.Length; Stream datastream = renewRequest.GetRequestStream(); datastream.Write(arr, 0, arr.Length); datastream.Close(); HttpWebResponse renewResponse = (HttpWebResponse)renewRequest.GetResponse(); } 

作为旁注,我是C#的新手,因此在我学习的过程中对它的了解有限,所以请耐心等待!

谢谢

对于因缺乏API或文档知识而陷入困境的其他人,看起来我的某些标题错误/缺失。

以下是满足Recurly服务器的代码。

 try { HttpWebRequest renewRequest = (HttpWebRequest)WebRequest.Create(uri); renewRequest.Headers.Add("Authorization", "Basic " + encodeB64); renewRequest.Method = "PUT"; renewRequest.ContentLength = 0; renewRequest.UserAgent = "mylib/1.0"; renewRequest.Host = "XXXX.recurly.com"; renewRequest.Accept = "application/xml"; HttpWebResponse renewResponse = (HttpWebResponse)renewRequest.GetResponse(); } 

如您所见,Accept标头现在是application / xml,并且缺少userAgent标头,这似乎解决了内部服务器错误消息。