我正在尝试向API文档定义的URI发送PUT
请求。本文档指出您只需向URL发送PUT请求即可重新激活帐户。
但是,当我通过适当的身份验证向此网址发送PUT
请求时,我会收到411 length required
响应。阅读后我发现可以通过将PUT
请求的内容长度设置为0来绕过这个,这可以绕过411
并且DOES成功重新激活帐户,但我现在收到{ {1}}内部服务器错误响应。
文档(和技术支持人员)声明PUT请求是空的,但内容长度为0.工作人员也无法重现我的问题,但因为他们不再支持API的C#我假设他们只是发送500
请求/使用PHP或类似的东西,这对我来说不是一个选项。
在C#中,我尝试使用cURL
,WebClient
甚至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