用这种方法我应该返回什么以获取部门和部门中存在的学生名单?为什么我需要使用.Result?

问题描述 投票:0回答:1

我已经实现了一个由两个实体Student和Department组成的核心Web api,并实现了一个部门可以拥有多个学生的一对多关系。我创建了一个名为DepartmentStudentsResponse的响应模型,如下所示。

1)我要实现GetStudents(int id)方法,在该方法中将提供特定的部门ID,并且应该返回其中包含listOfstudents的部门。

2)在GetStudents(int id)方法中,departmentStudents.department = department.Result;departmentStudents.students = listOfStudents.Result;为什么我们需要.Result?没有.Result,我该如何实施?

DeparmentController.cs GetStudents(int id)

HttpGet("{id}")]
     //   [Route("DepartmentWithStudent")]
        public async Task<ActionResult<Student>> GetStudents(int id)
        {
            DepartmentStudentsResponse departmentStudents = new DepartmentStudentsResponse();

            var department =  _context.Departments.FindAsync(id);
            if (department != null)
            {
                departmentStudents.department = department.Result;

                var listOfStudents = _context.Students.Where(x => x.DepartmentId == id).ToListAsync();
                departmentStudents.students = listOfStudents.Result;
                //return departmentStudents;
            }
            else
            {
                return NotFound();
            }
         }

DepartmentStudentsResponse.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Students.Models
{
    public class DepartmentStudentsResponse
    {
        public Department department { get; set; }
        public List<Student> students { get; set; }
    }
}

asp.net-core-webapi model-binding return-type
1个回答
0
投票

您不需要使用.Result

.Result之类的阻塞调用混合异步等待会导致死锁。这些异步调用应等待。

到目前为止,满足您要求的所有内容都显示在所示方法中。需要进行一些更改才能使其正常运行。

HttpGet("{id:int}")]     
public async Task<ActionResult<DepartmentStudentsResponse>> GetStudents(int id) {
    DepartmentStudentsResponse departmentStudents = new DepartmentStudentsResponse();

    var department =  await _context.Departments.FindAsync(id);
    if (department != null) {
        departmentStudents.department = department;

        var listOfStudents = await _context.Students.Where(x => x.DepartmentId == id).ToListAsync();
        departmentStudents.students = listOfStudents;
        return departmentStudents;
    } else {
        return NotFound();
    }
 }
© www.soinside.com 2019 - 2024. All rights reserved.