Добавить документы с помощью c # - PullRequest
1 голос
/ 11 августа 2010

Я пытаюсь добавить документ в индекс с помощью c # (xml), но всегда получаю ошибку 400 (неверный запрос). Есть идеи, что я делаю не так?

Код:

    private static string GetXml()
    {
        XDocument document = new XDocument(
            new XDeclaration("1.0", "UTF-8", "yes"),
            new XElement("add",
                new XElement("doc",
                    new XElement("field",
                        new XAttribute("name", "employeeId"),
                        new XText("05991")),
                    new XElement("field",
                        new XAttribute("name", "skills"),
                        new XText("Perl"))
                    )
                )
            );
        return document.ToString(SaveOptions.DisableFormatting);
    }

    private static void AddDocument()
    {
        string content = GetXml();
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://mysolrhost:8080/solr/update");
        request.Method = "POST";
        request.ContentType = "text/xml; charset=utf-8";
        byte[] byteArray = Encoding.UTF8.GetBytes(content);
        request.ContentLength = byteArray.Length;

        using (var requestStream = request.GetRequestStream())
        using (var sw = new StreamWriter(requestStream))
        {
            sw.Write(content);
        }
        WebResponse response = request.GetResponse();
        Console.WriteLine(((HttpWebResponse) response).StatusDescription);
    }

    public static void Main(string[] args)
    {
        AddDocument();
    }

Редактировать: проблема решена (см. Ответ ниже).

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Это выстрел в темноте, но в подобных ситуациях у меня был сервер, который не мог обрабатывать спецификацию в начале документа (что должно быть, IMHO, просто отлично).Один простой способ проверить, не в этом ли проблема:

  • изменить на byte[] byteArray = new UTF8Encoding(false).GetBytes(content);
  • избавиться от StreamWriter (он вам не нужен в существующемкод), просто requestStream.Write(byteArray, 0, byteArray.Length);
0 голосов
/ 11 августа 2010

Ах, глупый я, я забыл добавить поле в схему, и это причина, почему я получил 400. Теперь все в порядке.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...