【发布时间】:2017-02-22 11:21:40
【问题描述】:
所以。
我已经花了 3 个小时试图找出引发 The given key was not present in the dictionary. 错误的问题,但不幸的是,通过许多 SO 问题和博客文章并没有太大帮助。
我有一个简单的 Facebook 批处理参数字典,当我遍历结果时,它会抛出错误 The given key was not present in the dictionary。
这是引发异常的代码:
foreach (FacebookPermissionModel permissionResult in
result.SelectMany(x => x.data).Where(y => y.status == "granted"))
{
RequiredPermissions[permissionResult.permission].granted = true; // the error comes from here.
}
完整代码如下:
protected List<FacebookPermissionRequest> CheckPermissions(Dictionary<string, FacebookPermissionRequest> RequiredPermissions)
{
var access_token = HttpContext.Items["access_token"].ToString();
if (!string.IsNullOrEmpty(access_token))
{
var appsecret_proof = access_token.GenerateAppSecretProof();
var fb = new FacebookClient(access_token);
IEnumerable<FacebookPermissionRequest> MissingPermissions =
new List<FacebookPermissionRequest>(); //initialize to an empty list
if (MissingPermissions != null)
{
//create an array of Facebook Batch Parameters based on list of RequiredPermission
FacebookBatchParameter[] fbBatchParameters =
new FacebookBatchParameter[RequiredPermissions.Values.Count()];
int idx = 0;
foreach (FacebookPermissionRequest required_permssion in
RequiredPermissions.Values)
{
fbBatchParameters[idx] = new FacebookBatchParameter
{
HttpMethod = HttpMethod.Get,
Path = string.Format("{0}{1}",
"me/permissions/",
required_permssion.permision_scope_value)
.GraphAPICall(appsecret_proof)
};
required_permssion.granted = false; //initalize all granted indicators to false for each required permission
idx++;
}
dynamic permission_Batchresult = fb.Batch(
fbBatchParameters
);
if (permission_Batchresult != null)
{
List<PermissionResults> result = JsonConvert.
DeserializeObject<List<PermissionResults>>
(permission_Batchresult.ToString());
foreach (FacebookPermissionModel permissionResult in
result.SelectMany(x => x.data).Where(y => y.status == "granted"))
{
RequiredPermissions[permissionResult.permission].granted = true; // the error comes from here.
}
MissingPermissions = RequiredPermissions.Values.
Where(p => p.granted == false);
}
}
return MissingPermissions.ToList();
}
else
throw new HttpException(404, "Missing Access Token");
}
【问题讨论】:
-
@TimSchmelter 查看我指出的代码引发错误的位置。是的,我确实对其进行了调试,并显示了两个值
-
既然您已经阅读了有关 stackoverflow 的其他问题,我想您已经知道如何使用
ContainsKey等来避免这种异常。但问题是:您为什么希望每个permission都以输入字典? -
只是因为找到丢失的权限,没有授予的权限