我正在尝试将一些数据发送到REST API。 API的文档告诉我,我必须使用PATCH,并将数据提供为JSON。 API还需要oAuth 2.0来进行调用,因此我首先获取访问令牌并将其附加到api url调用。
我有以下代码:
public MyResponse HttpPatch(
string url,
string content,
Dictionary<string, string> headers,
string contentType = "application/json")
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(url));
if (request == null)
throw new ApplicationException(string.Format("Could not create the httprequest from the url:{0}", url));
request.Method = "PATCH";
foreach (var item in headers)
request.Headers.Add(item.Key, item.Value);
UTF8Encoding encoding = new UTF8Encoding();
var byteArray = Encoding.ASCII.GetBytes(content);
request.ContentLength = byteArray.Length;
request.ContentType = contentType;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
try
{
var response = (HttpWebResponse)request.GetResponse();
return new MyResponse(response);
}
catch (WebException ex)
{
HttpWebResponse errorResponse = (HttpWebResponse)ex.Response;
return new MyResponse(errorResponse);
}
}
在try块中,我在.GetResonse上收到错误,该错误表示&#34;(400)Bad Request&#34;。 我为方法提供的值:
url = https://api.myserver.com/v1/users/1234?access_token=my_access_token (myserver和my_access_token在我的代码中有实际值)
content = lang = fr&amp; nationality = FR&amp; country = FR&amp; first_name = John&amp; last_name = Doe
headers =带有1个元素的字典:{&#34;授权&#34;,&#34; ApiKey myuser:mykey&#34;} (myuser和mykey在我的代码中有实际值)
contentType =&#34; application / json&#34;
有什么明显的遗漏,我可以解释这个错误的请求&#34;错误?可能出现此错误的原因是什么?
我使用的访问令牌是正确的,端点URL是正确的。 我不确定&#34; PATCH&#34;方法的价值,我能这样做吗?因为MSDN文档没有在可能的值中提到这一点: https://msdn.microsoft.com/nl-be/library/system.net.httpwebrequest.method(v=vs.110).aspx
现在拉我的头发并挣扎2天才能使电话正常工作,所以希望有人能告诉我一些好的指示,让我走上正确的轨道?
答案 0 :(得分:1)
最终搞定了。 原来我的内容类型错了,因为我没有提供json。 将其更改为“application / x-www-form-urlencoded”并保留方法的PATCH值后,它现在可以正常工作。