2014-12-11 4 views
2

나는 following example 같은 Elasticsearch에 간단한 "요청 본문 검색"을 실행하려고하지만 는 GET 요청

$ curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{ 
    "query" : { 
     "term" : { "user" : "kimchy" } 
    } 
} 
' 

대신 .NET을 사용하여 다음 내 .NET 코드입니다으로 컨텐츠 몸을 보낼 수 없습니다.

var uri = "http://localhost:9200/myindex/_search"; 
var json = "{ \"query\" : { \"term\" : { \"user\" : \"kimchy\" } } }"; 

var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri); 
request.ContentType = "text/json"; 
request.Method = "GET"; 

var responseString = string.Empty; 

using (var streamWriter = new System.IO.StreamWriter(request.GetRequestStream())) 
{ 
    streamWriter.Write(json); 
    streamWriter.Flush(); 
    streamWriter.Close(); 

    var response = (System.Net.HttpWebResponse)request.GetResponse(); 
    using (var streamReader = new System.IO.StreamReader(response.GetResponseStream())) 
    { 
     responseString = streamReader.ReadToEnd(); 
    } 
} 

그러나 다음 오류가 발생합니다.

Cannot send a content-body with this verb-type. 
... 
Exception Details: System.Net.ProtocolViolationException: Cannot send a content-body with this verb-type. 
... 
Line 54: using (var streamWriter = new System.IO.StreamWriter(request.GetRequestStream())) 

I 표준 .NET 클래스를 사용하여 GET 요청과 콘텐츠 바디를 보낼 수있는 방법이 있습니까. 아니면 해결 방법이 있습니까?

답변

2

MethodPOST으로 변경하면 문제를 해결할 수 있습니다.

request.Method = "POST"; 

MSDNGetResponseStream() 방법이 GET 또는 HEAD 방법으로 호출 될 경우 ProtocolViolationException가 슬로우 될 것이라고 주장한다.

+1

같은 문제가 있지만 메서드를 가져와야하는데 GET에서 POST로 변경할 수있는 권한이 없으므로이 문제에 대한 다른 해결 방법이 있습니까? –