从C#代码调用REST服务
我正在使用以下代码使用C#调用REST服务
string PostData= @"{""name"":""TestName""}";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://something.com:1234/content/abc.v1.json");
request.Method = "POST";
request.ContentLength = 0;
request.ContentType = ContentType;
request.Accept = "application/json";
request.KeepAlive = false;
request.CookieContainer = cookie;
if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST)
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData);
request.ContentLength = bytes.Length;
request.AllowAutoRedirect = true;
using (Stream writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
try
{ // Gets exception
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
....
}
}
我在调用GetResponse()
的行上收到异常“400错误请求”。 该服务的文档说状态码400意味着缺少一个必需的参数。 但正如您所看到的,参数name
(这是唯一必需的参数)随请求提供。
我试图用CURL调用服务,并成功执行。
curl -v -b cookie.txt -X POST -H“Content-Type:application / json”-d“{”name “:”TestName “}”http://something.com:1234/content /abc.v1.json
所以我认为我的C#代码有些问题,它似乎没有传递参数。 任何想法?
编辑
这里是文档的相关部分:
方法
POST
头
内容类型: application / json
身体
请求主体由包含以下属性的JSON组成:
名称 :名称必需 :是类型 :字符串
响应状态代码
201创建成功
400错误请求请求正文中缺少必需的属性。
这不是数据在POST请求中发送的方式。 它应该是这样的:
string PostData= "name=TestName";
如果您有多个值,请使用&
字符分隔它们。 例:
string PostData= "name=TestName&number=20";
我建议使用System.Net.Http HttpClient类。
string PostData = @"{""name"":""TestName""}";
var httpClientHandler = new HttpClientHandler();
httpClientHandler.CookieContainer = cookies;
var httpClient = new HttpClient(httpClientHandler);
var content = new StringContent(PostData,
Encoding.GetEncoding("iso-8859-1"), "application/json");
httpClient.PostAsync("http://something.com:1234/content/abc.v1.json", content);
链接地址: http://www.djcxy.com/p/45883.html
上一篇: Calling REST service from C# code
下一篇: System.Net.WebException when sending JSON using POST request to a Jira API