URL-адрес Solr, выдающий неверный запрос (400) из строки запроса веб-клиента POST - PullRequest
0 голосов
/ 03 октября 2018

Я сталкиваюсь со странной проблемой при передаче нескольких fq в строке запроса в SOLR.Это хорошо работает с одним fq, но несколько параметров fq не работает.я потратил два дня на эту проблему :( Согласно MSDN, несколько fq преобразуются в fq = 1,2,3. Я написал утилиту для разделения запятых, и теперь fq выглядит как fq = 1 & fq = 2 & fq = 3. Я пытался сделать то же самое из SOLR.Пользовательский интерфейс работает отлично. Пример -

https://example.com:8765/solr/test/select?fq=last_save_date:{2016-01-01T00:00:00Z TO 2018-01-01T23:59:59Z}&fq=id:*.pdf&q="John"&start=0&rows=20

Я попробовал то же самое из моего кода C #, и он формирует URL как -

https://example.com:8765/solr/test/select?fq=last_save_date:{2016-01-01T00:00:00Z TO 2018-01-01T23:59:59Z}&fq=id:*.pdf&q="John"&start=0&rows=20

Интересно то, что URL, который я получаю в ответ от кодакогда я пытаюсь это сделать прямо в браузере, это работает, даже если я попробовал приведенный ниже код, чтобы проверить, является ли URL верным, и возвращает ожидаемый результат -

    string html;
 using (WebClient client = new WebClient())
 {
 var string1 = "\"John\"";
 html = client.DownloadString(@"https://example.com:3456/solr/test/select?fq=last_save_date:{2016-01-01T00:00:00Z TO 2018-01-01T23:59:59Z}&fq=id:*.pdf&q=" + string1 + "&start=0&rows=20");
                    }

Мой код -

System.Uri uri = new System.Uri(solrCoreConnection + "/example");

                SolrUtility utility = new SolrUtility("fq"); // This utility split commas from multiple fq and add &fq=
                using (WebClient wc = new WebClient())
                {

                    if (!string.IsNullOrEmpty(dateTime))
                    {                        
                         utility.Add("fq", dateTime);
                    }
            if (!string.IsNullOrEmpty(filename))
                    {                        
                         utility.Add("fq", filename);
                    }
            wc.QueryString = utility;
// This line throws bad request (400)
                    byte[] data = wc.UploadValues(uri, "POST", wc.QueryString); 

         catch (WebException ex)
                    {
                if (ex.Status == WebExceptionStatus.ProtocolError && ex.Response != null)
                {
                    var resp = (HttpWebResponse)ex.Response;
                    if (resp.StatusCode == HttpStatusCode.NotFound) // HTTP 404
                    {
                        //Handle it
                    }
                }
                //Handle it
            }
...