Kibana Post Search – Ожидается [START_OBJECT], но найдено [VALUE_STRING]

Пожалуйста, помогите мне с этой проблемой.

У меня есть основной клиент .net:

var client = new RestClient();
        client.BaseUrl = new Uri(Host);
        client.AddDefaultHeader("Content-Type", "application/json");

        var request = new RestRequest();
        request.Resource = "_search";           
        request.AddJsonBody(queryDslKibana);
        request.Method = Method.POST;
        request.AddHeader("Content-Type", "application/json");
        request.RequestFormat = DataFormat.Json;

Uri: http://URL:PORT/_search

queryDslKibana выглядит следующим образом:

{"query":{"match":{"message":".Txt"}}} 



It runs on postman gracefully but the response on .net is: 

 {
    "error": {
        "root_cause": [{
            "type": "parsing_exception",
            "reason": "Expected [START_OBJECT] but found [VALUE_STRING]",
            "line": 1,
            "col": 1
        }],
        "type": "parsing_exception",
        "reason": "Expected [START_OBJECT] but found [VALUE_STRING]",
        "line": 1,
        "col": 1
    },
    "status": 400
 }

Пожалуйста помоги :)


person Roberto2790    schedule 31.07.2018    source источник


Ответы (2)


Мне кажется, что переменная "queryDslKibana" не имеет подходящего формата JSON, при использовании метода "AddJsonBody()" важно, чтобы объект имел соответствующий формат. Метод "AddJsonBody()" сериализует отправляемый вами объект, поэтому сначала следует попробовать анонимный объект.

Что-то такое:

var requestObject = new {query = new {match = new {message = ".txt"}}};

Это должно привести к нужному вам JSON:

{"query": {"match": {"message": ". Txt"}}}
person Michael Emir    schedule 31.07.2018

Спасибо @michael.

Окончательный код:

к kibana api к конечной точке _search.

Проблема заключалась в .net RestClient, потому что я должен отправить объект (анонимный объект или строго типизированный объект), как вы сказали...

Ответ по коду:

        var client = new RestClient();
        client.BaseUrl = new Uri(Host);
        client.AddDefaultHeader("Content-Type", "application/json");

        var request = new RestRequest();
        request.Resource = "_search";
        //{"query":{"match":{"message":"SEPP"}}}
        request.AddJsonBody(new { query = new { match = new { message = "SEPP" } } });
        request.Method = Method.POST;
        request.AddHeader("Content-Type", "application/json");
        request.RequestFormat = DataFormat.Json;

        IRestResponse response = client.ExecutePostTaskAsync(request).Result;
person Roberto2790    schedule 31.07.2018