空PUT请求返回内部服务器错误

时间:2013-09-12 09:27:35

标签: c# curl request put

我正在尝试向API文档定义的URI发送PUT请求。本文档指出您只需向URL发送PUT请求即可重新激活帐户。

但是,当我通过适当的身份验证向此网址发送PUT请求时,我会收到411 length required响应。阅读后我发现可以通过将PUT请求的内容长度设置为0来绕过这个,这可以绕过411并且DOES成功重新激活帐户,但我现在收到{ {1}}内部服务器错误响应。

文档(和技术支持人员)声明PUT请求是空的,但内容长度为0.工作人员也无法重现我的问题,但因为他们不再支持API的C#我假设他们只是发送500请求/使用PHP或类似的东西,这对我来说不是一个选项。

在C#中,我尝试使用cURLWebClient甚至Raw套接字来尝试使其完全正常工作(我需要在我的代码中进行验证的响应代码),但无济于事。

API不支持C#,所以我一帆风顺,有没有人知道如何将一个空实体PUT HTTPWebRequest复制到C#中的url或知道其他任何可能的解决方法?

编辑:尝试过的代码示例: HttpWebRequest试过,返回500服务器错误。 删除Content-length标头以生成411

cURL

WebClient方法(快速键入,可能有点不对,我现在已经废弃了这段代码,所以这只是一个想法,它工作但也返回服务器错误(500)

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();

用Fiddler检查传出和传入的请求,也尝试在Fiddler中编写请求,同样的问题是方法,需要内容长度或服务器错误,所以我开始认为我联系的服务器本身就是问题,而不是我

请注意这些请求DID重新激活订阅,尽管有500错误代码

Fiddler raw request:

try
{
    WebClient wc = new WebClient();
    wc.Headers.Add("Authorization", "Basic " + encodeB64);
    wc.UploadString(uri, "PUT", "");
    String status = wc.ResponseHeaders.Get("Status");
}

响应原始:

PUT https://xxxxxx.recurly.com/v2/subscriptions/xxxxxxxxxxxxxxxxxxxxxxx/reactivate HTTP/1.1
Authorization: Basic Y2U0OWZlZGNjMGU3NDEXuIOSmNNYxSakYTU4MzBhZDE0YmU=
Host: xxxxx.recurly.com
Content-Length: 0

0 个答案:

没有答案