Rya*_*etz 13 .net c# solr httpclient
我有查询,我正在运行solr索引,有时有很长的查询参数,我运行这些查询时出错,我认为这是对GET查询参数的限制.
这是我用来查询的方法(JSON),这是为了表明我正在使用Http Extensions(我使用的客户端是HttpClient的瘦包装器)而不是端到端解决方案.90%的查询运行正常,只是当参数很大时我从solr得到500错误.我在某处读过你在执行select命令时可以使用POSt的但是没有找到如何做的例子.任何帮助都会很棒!
public string GetJson(HttpQueryString qs)
{
using (var client = new DAC.US.Web.XmlHttpServiceClient(this.Uri))
{
client.Client.DefaultHeaders.Authorization = new Microsoft.Http.Headers.Credential("Basic", DAC.US.Encryption.Hash.WebServiceCredintials);
qs.Add("wt", "json");
if (!String.IsNullOrEmpty(this.Version))
qs.Add("version", this.Version);
using (var response = client.Get(new Uri(@"select/", UriKind.Relative), qs))
{
return response.Content.ReadAsString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mau*_*fer 13
/ select接受POST请求而不会出现问题.你可以用curl试试这个:
curl -d "q=*:*&rows=1" http://localhost:8983/solr/select
Run Code Online (Sandbox Code Playgroud)
我无法评论XmlHttpServiceClient,因为它似乎是一些专有代码,但请参阅此页面以获取使用HttpWebRequest 进行POST 的示例.
顺便说一句:有.net库可以实现与Solr的通信,除非你有一些非常奇怪的要求,否则不需要自己动手.
小智 7
请务必设置内容类型:application/x-www-form-urlencoded,否则您将获得500的状态代码.
Curl默认执行此操作.
如果您的XmlHttpServiceClient是硬编码/默认使用text/xml作为内容类型,我不会感到惊讶.HttpWebRequest更合适.