使用c#添加文档

时间:2010-08-11 08:02:20

标签: c# xml httpwebrequest linq-to-xml

我正在尝试使用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 个答案:

答案 0 :(得分:1)

这是一个黑暗的镜头,但在类似的情况下,我已经让服务器无法在文档的开头处理BOM(它应该,恕我直言,很好)。尝试查看是否存在问题的一种简单方法是:

  • 更改为byte[] byteArray = new UTF8Encoding(false).GetBytes(content);
  • 摆脱StreamWriter(现有代码中不需要它),只需requestStream.Write(byteArray, 0, byteArray.Length);

答案 1 :(得分:0)

啊,愚蠢的我,我忘了在架构中添加字段,这就是我得到400的原因。现在一切都好了。

非常感谢!