2013-03-28 78 views
2

我有以下卷曲代码:转换JSON卷曲C#

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

你有什么错误?是localhost:8983是否有效? – Rob

+0

你应该提供你正在得到的错误。 –

+0

我得到的错误是:远程服务器返回一个错误:(400)错误的请求。“,”在System.Net.HttpWebRequest.GetResponse()的StackTrace() – dhardy

回答

1

也许这是你已经在你所涌入的请求您的JSON内容删除方括号?尝试将[]添加回数据的开始/结束。虽然“BadRequest”通常是非常严格的错误,告诉您HTTP请求格式错误,但您的服务器实际上也可能为其他情况返回该代码 - 例如缺少会话ID - 这可能发生在这里。

注意DIFF:

-d '[{"Session_SessionId":"da70..... 
    ^bracket 

string json = "{\"Session_SessionId\":\"" + sessionId + "\"," + .... 
      ^no bracket 

,并在数据的结尾一样。
但是,当然,这只是一个猜测。 :)

+0

添加了方括号,in - no errors了!谢谢你,现在找出为什么它不更新... – dhardy

+0

很酷:) goodluck :) – quetzalcoatl

0

服务器无法理解您的请求。你检查了json变量的输出吗?我相信JSON字符串没有正确生成。

为什么不使用JavaScriptSerializer.Serialize来创建JSON字符串。

0

您使用的更新处理用JSON对象将需要按照Update JSON - Update Commands

+0

我相信我已经遵循这个原始卷曲的作品,我只需要在C#中相同的implmentation, – dhardy

0

列出的JSON格式作为另一个用户建议您JSON输出卷曲不匹配。尝试以下内容而不是输入文字。

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

只要使用SolrNet。如果您使用Solr 4+进行此操作,则需要下载最新代码并自行构建,但这非常简单。

0

戴夫,它为我工作。

您错过了方括号。只需替换下面的各行:

string json =“[{\”Session_SessionId \“:\”“+ sessionId +”\“,”+ “\”“+ fieldName +”\“:{\设置\“:\”“+ fieldValue +”\“}}]”;