2015-09-18 52 views
0

我想使用REST API(.NET)併發出合併查詢以執行neo4j數據庫。我的查詢是:Neo4j,Cypher合併查詢不會與REST API執行

{ "query" : "MERGE (n:Person { props }) ON CREATE SET n.id = 55 RETURN n" , "params" :{ "props" : { "name" : 'Mahsa', "lastname" : 'Hassankashi' } }} 

OR

{ "query" : "MERGE (n:Person { props }) ON CREATE SET n.id = {PersonID} RETURN n" , "params" :{ "props" : { "name" : 'Mahsa' } , "PersonID" : 55} } 

但我的 「HttpWebResponse響應」 是空,因爲當我送的時候HttpWebResponse返回null它在這一行流呢:

Stream requestStream = request.GetRequestStream(); 

它具有長度和位置錯誤:

(1):'requestStream.Position'拋出了一個例外的typ e'System.NotSupportedException'

(2)。 「這個流不支持查找操作。」,這意味着我的查詢不正確。我如何糾正查詢。

重要的是,我已經從我的httpwebresponse獲取其他密碼查詢的答案,這意味着我的發送請求(密碼)和接收響應是可能的其他查詢。

下面的查詢工作,當我把它直接放在Neo4j的2.2.4:

MERGE (n:Person { name : "mahsa", lastname : "hassankashi" }) ON CREATE SET n.id=55 RETURN n 

請求類:

//****** Send Cypher Query by HttpWebRequest and Stream 
      HttpWebRequest request = (HttpWebRequest) 
      WebRequest.Create(url); 
      request.KeepAlive = true; 
      request.ProtocolVersion = HttpVersion.Version10; 
      request.Method = methodType; 
      request.Timeout = Timeout.Infinite; 


      byte[] postBytes = Encoding.UTF8.GetBytes(json); 

      request.ContentType = "application/json; charset=UTF-8"; 
      request.Accept = "application/json"; 
      request.ContentLength = postBytes.Length; 

      Stream requestStream = request.GetRequestStream(); 

      requestStream.Write(postBytes, 0, postBytes.Length); 
      requestStream.Close(); 

      response = (HttpWebResponse)request.GetResponse(); 

謝謝你在先進的幫助。

+0

也許你可以共享代碼示例,其中請求構建? – FylmTM

+1

@FylmTM,我寫了請求類,但它對其他密碼查詢正常工作。 –

+0

您是否具有涉及「人員」標籤的唯一性約束? – cybersam

回答

0

我使用Cypher跨國端點而不使用參數,當我使用參數時,我無法使用Merge with REST API。

{"statements" : [ {"statement" : "MERGE (n:Person { name : 'Mahsa' , lastname : 'Hassankashi' }) ON CREATE SET n.id =1 RETURN n"} ]} 

POST到:http://localhost:7474/db/data/transaction/commit

0

看起來像您使用無效的JSON格式Cypher transactional endppoint

你的情況,這應該是這樣的:

{ 
    "statements" : [ { 
    "statement" : "MERGE (n:Person { props }) ON CREATE SET n.id = 55 RETURN n", 
    "parameters" : { 
     "props" : { 
     "name" : 'Mahsa', 
     "lastname" : 'Hassankashi' 
     } 
    } 
    } ] 
} 

這將是交易終端正確的JSON輸入。

如果你使用一些特定的.NET庫來調用Neo4j數據庫 - 你應該根據他們的文檔驗證你的輸入。

+1

我試過你的解決方案,但我得到了同樣的結果。 –