microsoft-graph-api - 如何使用 Graph API 打印反馈和积分?
问题描述
我创建了一个函数来使用 Microsoft Graph Education API 返回结果。我想打印反馈和积分,但我不能,它们不存在。这是代码:
public static async Task<IEnumerable<EducationOutcome>> GetOutcomesForSubmission()
{
var outcomes = await graphClient
.Education
.Classes["8557483b-a233-4710-82de-e1bdb03bb9a9"]
.Assignments["1b09cd43-cf87-4cef-a043-ae3d6160c200"]
.Submissions["d4486e20-1b47-4b5b-720c-0fe0038d4882"]
.Outcomes
.Request()
.GetAsync();
return outcomes;
}
public static void ListOutcomes()
{
var outcomes = GetOutcomesForSubmission().Result;
Console.WriteLine("Outcomes:\n");
foreach (var v in outcomes)
{
Console.WriteLine($"User id: {v.LastModifiedBy.User.Id}, Submission id: {v.Id}");
}
Console.WriteLine("\n");
}
解决方案
您的问题是GetAsync()
没有返回EducationOutcome
对象集合。它正在返回一个EducationSubmissionOutcomesCollectionPage
。要获得实际结果,您需要返回CurrentPage
属性。
public static async Task<IEnumerable<EducationOutcome>> GetOutcomesForSubmission()
{
var response = await graphClient
.Education
.Classes["8557483b-a233-4710-82de-e1bdb03bb9a9"]
.Assignments["1b09cd43-cf87-4cef-a043-ae3d6160c200"]
.Submissions["d4486e20-1b47-4b5b-720c-0fe0038d4882"]
.Outcomes
.Request()
.GetAsync();
return response.CurrentPage.ToList();
}
请注意,这只会返回第一页数据。如果要获取所有数据,则需要使用response.NextPageRequest
属性进行分页:
var outcomes = response.CurrentPage.ToList();
while (response.NextPageRequest != null)
{
response = await response.NextPageRequest.GetAsync();
outcomes.AddRange(response.CurrentPage);
}
return outcomes;
请记住,这EducationOutcome
是一个基类,因此它只包含所有“结果”类型共有的属性(在这种情况下很少)。如果您想要特定类型的 Outcome,则需要先将其转换为特定类型:
foreach (var v in outcomes)
{
if (v is EducationRubricOutcome)
{
var outcome = v as EducationRubricOutcome;
Console.WriteLine($"User id: {outcome.LastModifiedBy.User.Id}, Submission id: {outcome.Id}, Feedback Count: {outcome.RubricQualityFeedback.Count}");
}
else if (v is EducationPointsOutcome)
{
var outcome = v as EducationPointsOutcome;
Console.WriteLine($"User id: {outcome.LastModifiedBy.User.Id}, Submission id: {outcome.Id}, Points: {outcome.Points.Points}");
}
else if (v is EducationFeedbackOutcome)
{
var outcome = v as EducationFeedbackOutcome;
Console.WriteLine($"User id: {outcome.LastModifiedBy.User.Id}, Submission id: {outcome.Id}, Feedback: {outcome.Feedback.Text}");
}
}
推荐阅读
- python - Python 字典用户名和密码
- python - 你能根据变量在python中命名一只乌龟吗?
- python - 在特定路径中创建文件夹 google drive
- javascript - 在创建 Observable 时访问自动创建的数据库 ID?
- php - 在 PHP 中按特定顺序重新排序数组数组
- android - 回收站视图中的 ImageView 尺寸错误 CardView
- angular - 从下拉列表中删除最新项目
- zsh - 在脚本中使用 zsh 的 vared 进行行编辑
- python - mayavi 中与圆锥相交的线
- java - AtomicInteger类中getAndIncrement方法中的spin是什么意思?