gpt4 book ai didi

c# - 通过WebRequest C#将JSON字符串发布到ElasticSearch

转载 作者:行者123 更新时间:2023-12-03 00:10:51 25 4
gpt4 key购买 nike

我想通过Web请求将json数据发布到elasticsearch。我收到以下代码的错误请求。添加了堆栈跟踪日志。

        string responseFromServer = string.Empty;
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:9200/test/test");
webRequest.Method = "POST";
string username = "aaa";
string password = "aaa";
string auth = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(username + ":" + password));
webRequest.Headers.Add("Authorization", "Basic " + auth);
webRequest.ContentType = "application/json";
webRequest.Accept = "application/json";
using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)webRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}

堆栈跟踪:
   at System.Net.HttpWebRequest.GetResponse()
at APIResponse.Program.posttoelk(String json) in Program.cs:line 85
at APIResponse.Program.Main(String[] args) in :line 50
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

最佳答案

我最近运行了一些代码,这些代码与您在上面所做的非常相似,并且适用于我的大部分数据集[1]。因此,我认为您上面的代码很好。从我的有限检查来看,似乎我的一些JSON对象因未正确转义而失败。

我认为您在声明中并未向我们展示json变量的内容:

           streamWriter.Write(json);

与我上面所说的一致,您尝试在streamWrite.Write语句中编写的JSON可能格式错误或被错误地转义。我建议您在上述行中设置一个断点,并在Visual Studio调试器中检查json变量的内容,以确保您的JSON确实有效。

如果您有权访问Kibana,建议您根据 https://www.howtoforge.com/tutorial/elasticsearch-and-kibana-installation-and-basic-usage-on-ubuntu-1604/的“6.2插入一些数据到索引”部分,打开Kibana开发工具并在其中发布json变量的内容。

通过Kibana发布JSON时,您将立即获得有关JSON格式是否正确的反馈。在探索性测试期间,我觉得Kibana比GNU / Linux Curl语句或MS PowerShell Invoke-RestMethod命令更易于使用。

最后,在使用C#时,仅使用Elastic Search NEST API和POCO可能会更容易: https://www.elastic.co/guide/en/elasticsearch/client/net-api/1.x/nest-quick-start.html#_indexing
我不认为我会走这条路,但是对于某些人来说,这可能是一个更好的长期解决方案。

[1]-虽然我的许多JSON对象没有得到索引,但我的许多其他JSON对象却得到了索引。我认为这是因为我的某些JSON对象也格式错误或未正确转义。

关于c# - 通过WebRequest C#将JSON字符串发布到ElasticSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40735971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com