我有以下卷曲代码:
curl 'localhost:8983/solr/sessions/update?commit=true' -H 'Content-type:application/json' -d '[{"Session_SessionId":"da7007e9-fe7a-4bdf-b9e4-1a55034cf08f","Session_HasComments":{"set":true}}]'
我正在尝试转换为C#,但每次都出错,所以不确定我的代码是否正确...
这是我到目前为止所拥有的:
string path = "http://localhost:8983/solr/sessions/update?commit=true";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(path);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"Session_SessionId\":\"" + sessionId + "\"," +
"\"" + fieldName + "\":{\"set\":\"" + fieldValue + "\"}}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
}
这一行似乎总是出错()
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
我得到的错误是:
The remote server returned an error: (400) Bad Request.","StackTrace":" at System.Net.HttpWebRequest.GetResponse()
有什么想法吗?提前谢谢!
戴夫
答案 0 :(得分:1)
也许是因为您删除了要传输到请求中的JSON内容中的方括号?尝试将[]添加回数据的开头/结尾。虽然“BadRequest”通常是非常严格的错误,告诉您您的HTTP请求格式错误,但您的服务器实际上也可能会返回该代码以用于其他情况 - 例如缺少会话ID - 这可能发生在此处。
注意差异:
-d '[{"Session_SessionId":"da70.....
^ bracket
和
string json = "{\"Session_SessionId\":\"" + sessionId + "\"," + ....
^ no bracket
在数据结尾处也是如此 但是,当然,这只是猜测。 :)
答案 1 :(得分:0)
服务器无法理解您的请求。你检查了json变量的输出吗?我相信JSON字符串没有正确生成。
为什么不使用JavaScriptSerializer.Serialize创建JSON字符串。
答案 2 :(得分:0)
您使用带有JSON对象的更新处理程序需要遵循Update JSON - Update Commands
中列出的JSON格式答案 3 :(得分:0)
正如另一位用户建议您的JSON输出与CURL不匹配。请尝试以下操作,而不是键入文本。
var data = new[]
{
new
{
Session_SessionId = "da7007e9-fe7a-4bdf-b9e4-1a55034cf08f",
Session_HasComments = new {set = true}
}
};
var json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(data);
此外,您正在使用using
关键字来编写数据,并尝试在块内部处理响应 - 它可能确实有所作为,但可能值得在此块之外移动它。
最后,您可能需要将数据编码为字节数组。
以下是实施上述建议的代码。
string path = "http://localhost:8983/solr/sessions/update?commit=true";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(path);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
var data = new[]
{
new
{
Session_SessionId = "da7007e9-fe7a-4bdf-b9e4-1a55034cf08f",
Session_HasComments = new {set = true}
}
};
string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(data);
byte[] byteData = new System.Text.ASCIIEncoding().GetBytes(json);
httpWebRequest.ContentLength = byteData.Length;
using (Stream stream = httpWebRequest.GetRequestStream())
{
stream.Write(byteData,0,byteData.Length);
}
HttpWebResponse resp = (HttpWebResponse)httpWebRequest.GetResponse();
string respStr = new StreamReader(resp.GetResponseStream()).ReadToEnd();
Console.WriteLine("Response : " + respStr);
答案 4 :(得分:0)
你缺少方括号。只需用以下内容替换相应的行:
string json =“[{\”Session_SessionId \“:\”“+ sessionId +”\“,”+ “\”“+ fieldName +”\“:{\”set \“:\”“+ fieldValue +”\“}}]”;