C# 返回多个Json响应
我构建了这个API,它返回来自Google place API的JSON响应,以将其存储/保存到数据库中,正如这个代码示例显示的PlaceId列表,因此我编写了一个For循环来循环每个PlaceId,然后将它们全部返回到下一个点,即将它们发布到数据库中C# 返回多个Json响应,c#,json,.net,google-places-api,C#,Json,.net,Google Places Api,我构建了这个API,它返回来自Google place API的JSON响应,以将其存储/保存到数据库中,正如这个代码示例显示的PlaceId列表,因此我编写了一个For循环来循环每个PlaceId,然后将它们全部返回到下一个点,即将它们发布到数据库中 public class portal_teilnehmerController : ControllerBase { private readonly _0046696KContext _context; private
public class portal_teilnehmerController : ControllerBase
{
private readonly _0046696KContext _context;
private const string apiKey = @"apiKey";
private const string fields = "&fields=address_component,rating,reviews,user_ratings_total,website";
WebRequest request;
WebResponse response;
Stream data;
StreamReader reader;
private Task<string> responseFromServer;
private string[] JsonResponses = { };
public portal_teilnehmerController(_0046696KContext context)
{
_context = context;
}
[HttpGet]
[Produces("application/json")]
public async Task<JsonResult> Getportal_teilnehmerByPlaceId()
{
var PlaceId = await _context.portal_teilnehmer.Select(x => x.PlaceId).ToListAsync();
if (PlaceId == null)
{
throw new InvalidOperationException("This Portal ID not found, please be assure of your portal ID");
}
for (int i = 0; i < PlaceId.Count(); i++)
{
string url = @"https://maps.googleapis.com/maps/api/place/details/json?place_id=" + (PlaceId[i]) + (fields) + (apiKey);
request = WebRequest.Create(url);
response = await request.GetResponseAsync();
data = response.GetResponseStream();
reader = new StreamReader(data);
string timeStamp = GetTimestamp(DateTime.Now);
responseFromServer = reader.ReadToEndAsync();
}
return new JsonResult(await responseFromServer);
}
public类portal\u teilnehmerController:ControllerBase
{
私有只读(0046696KContext)上下文;
私有常量字符串apiKey=@“apiKey”;
private const string fields=“&fields=address\u component,rating,reviews,user\u ratings\u total,website”;
网络请求请求;
网络响应;
流数据;
流阅读器;
专用任务响应服务器;
私有字符串[]JsonResponses={};
公共门户网站teilnehmerController(_0046696K上下文)
{
_上下文=上下文;
}
[HttpGet]
[产生(“应用程序/json”)]
公共异步任务Getportal\u teilnehmerByPlaceId()
{
var PlaceId=wait_context.portal_teilnehmer.Select(x=>x.PlaceId.toListSync();
if(PlaceId==null)
{
抛出新的InvalidOperationException(“未找到此门户ID,请确保您的门户ID”);
}
对于(int i=0;i
但是当我测试时,它只返回For循环的最后一个PlaceId响应。
关于如何将它们全部返回到数组并保存它们,有什么想法吗
关于如何将它们全部返回到数组并保存它们,有什么想法吗
使用列表可能更容易:
var responsesFromServer = new List<string>();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
for (int i = 0; i < PlaceId.Count(); i++)
{
string url = @"https://maps.googleapis.com/maps/api/place/details/json?place_id=" + (PlaceId[i]) + (fields) + (apiKey);
request = WebRequest.Create(url);
response = await request.GetResponseAsync();
data = response.GetResponseStream();
reader = new StreamReader(data);
string timeStamp = GetTimestamp(DateTime.Now);
responsesFromServer.Add(await reader.ReadToEndAsync());
// ^ ^^^^^^^^^^ ^
}
return new JsonResult(responsesFromServer);
// ^
var responsesFromServer=newlist();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
对于(int i=0;i
带插入符号下划线的新位^
但是我想你可以使用数组,毕竟你知道你要下载多少个地方
var responsesFromServer = new string[PlaceId.Count()];
for (int i = 0; i < PlaceId.Count(); i++)
{
...
responsesFromServer[i] = await reader.ReadToEndAsync();
}
return new JsonResult(responsesFromServer);
var responsesFromServer=新字符串[PlaceId.Count()];
对于(int i=0;i
Wow,我没想到会这么简单,但猜猜它是什么魅力,我非常感谢你。谢谢。很抱歉,我不能投票支持你的答案,因为我是这里的一个noob。没关系。你的支持票仍然会被记录下来,即使它们没有显示出来,而且一旦你达到代表级别(我想是15),它们都会突然生效,为了使它们适用,请随意投票/提问和回答:)它没有刷新,所以我没有看到最新的编辑,但如果我理解得很好,我认为这两种方法做的是相同的事情,但出于某种原因,我想你的代码是做我们在这里讨论的事情的正确方法。它们实际上是相同的事情,并且会导致不同的结果他输出了相同的JSON。实际上,在内部,列表使用数组。我们只是倾向于使用列表来表示我们修改的集合,使用数组来表示我们不修改的集合/因为这一个正在被修改,所以我使用了列表。列表也总是有“正确的数字”元素来包含它的所有数据,而如果你在数组的一半停止处理,那么在数组的末尾会有一堆空插槽是的,我的意思是它们实际上是一样的,但是天哪,这就像我的代码有严重的问题,我现在应该遵循你的。再次感谢,感谢这些非常重要的信息。我投票祝你有一个美好的一天