发生了什么:
我在运行Update-Database
时尝试使用公司详细信息为我的数据库设定种子。但是,由于某些原因我无法理解,似乎我的Seed
帮助方法中的代码在其中一个帮助程序返回null
时忽略。
我在做什么:
这个想法很简单:
使用一堆标识符迭代文件并向API发送HttpWebRequest
以使用标识符获取详细信息。然后解析对Company
对象的响应。
但是,如果事实证明API中不存在其中一个标识符(如果是Request.StatusCode != HttpStatusCode.Ok
),则返回null
。或者如果周围的try-catch
失败,我会返回null
。
我应该注意到,我知道我的列表中的第一个标识符会返回一个不正常的状态代码!
问题:
null
永远不会被我的调用代码(下面的第一个片段)捕获,所以看起来它似乎正在尝试解析空的JObject
,这给了我这个错误消息:< / p>
指数超出范围。必须是非负数且小于 集合。参数名称:index
致电代码:
string[] symbols = Resources.Fixed_lines.Split(' ');
int stockId = 1;
foreach(var symbol in symbols)
{
var stockData = GetStockDataFromSymbol(symbol);
if (stockData != null)
{
var json = JObject.Parse(stockData);
var stock = new Company()
{
StockId = stockId,
Name = json["datatable"]["data"][0][1].ToString(),
Description = json["datatable"]["data"][0][0].ToString(),
Symbol = symbol
};
_context.Stocks.Add(stock);
stockId++;
} else
{
continue;
}
}
_context.SaveChanges();
HttpWebRequest
帮助者:
private string GetStockDataFromSymbol(string symbol)
{
try
{
string url = string.Format("https://www.quandl.com/api/v3/datatables/ZACKS/CP.json?" +
"qopts.columns[]=comp_desc&qopts.columns[]=comp_name&ticker={0}" +
"&api_key=myApiKey", symbol);
Debug.WriteLine(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.
Create(url);
request.Method = "Get";
request.KeepAlive = true;
request.ContentType = "application/json";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode != HttpStatusCode.OK)
{
return null;
}
string responseBody = string.Empty;
using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
{
responseBody = sr.ReadToEnd();
}
return responseBody;
}
catch (Exception ex)
{
return null;
}
}