WebAPI добавляет заголовки классов в начале - PullRequest
1 голос
/ 15 мая 2019

Я сериализовал ответ REST API на JSON через ASP.NET Web API. Вот мой результат: Формат JSON .

Я получаю доступ к этому результату по следующей ссылке: http://192.168.2.35:55281/api/Students. Поэтому я хочу, чтобы мой формат JSON начинался с заголовка класса, например:

"Students": [
  {
    "Id": 18,
    "Type": "Sayısal",
    "Class_Id": 9
  }
]

Но, к сожалению, как видно из ссылки вверху, у меня нет названия для Students. Как я могу активировать его в своем веб-API?

Вот мой контроллер:

public class StudentsController : ApiController
{
    private DBClassroomEntities db = new DBClassroomEntities();

    // GET: api/Students
    public IQueryable<Student> GetStudent()
    {
        return db.Student;
    }

    // GET: api/Students/5
    [ResponseType(typeof(Student))]
    public IHttpActionResult GetStudent(int id)
    {
        Student student = db.Student.FirstOrDefault(s=>s.Id==id);

        if (student == null)
        {
            return NotFound();
        }

        return Ok(student);
    }

    // PUT: api/Students/5
    [ResponseType(typeof(void))]
    public IHttpActionResult PutStudent(int id, Student student)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != student.Id)
        {
            return BadRequest();
        }

        db.Entry(student).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!StudentExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }

    // POST: api/Students
    [ResponseType(typeof(Student))]
    public IHttpActionResult PostStudent(Student student)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.Student.Add(student);
        db.SaveChanges();

        return CreatedAtRoute("DefaultApi", new { id = student.Id }, student);
    }

    // DELETE: api/Students/5
    [ResponseType(typeof(Student))]
    public IHttpActionResult DeleteStudent(int id)
    {
        Student student = db.Student.Find(id);
        if (student == null)
        {
            return NotFound();
        }

        db.Student.Remove(student);
        db.SaveChanges();

        return Ok(student);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }

    private bool StudentExists(int id)
    {
        return db.Student.Count(e => e.Id == id) > 0;
    }
}

1 Ответ

1 голос
/ 15 мая 2019
  1. Создать новый класс StudentList:

    public class StudentList
    {
        public List<Student> Students { get; set; }
    }
    
  2. Изменить этот метод:

    // GET: api/Students
    public IQueryable<Student> GetStudent()
    {
        return db.Student;
    }
    

    На этот:

    // GET: api/Students
    [ResponseType(typeof(StudentList))]
    public IHttpActionResult GetStudents()
    {
        StudentList studentList = new StudentList() 
        {
            Students = db.Student.ToList();
        }
    
        return Ok(studentList);
    }
    

JSON, возвращаемый этим методом, будет выглядеть примерно так:

{
  "Students": [
    {
        "Id": 18,
        "Type": "Sayısal",
        "Class_Id": 9,
        "Group_Id": 1,
        "FName": "Hüseyin",
        "LName": "Biçen"
    },
    {
        "Id": 20,
        "Type": "Yabancı Dil",
        "Class_Id": 7,
        "Group_Id": 6,
        "FName": "Hasan",
        "LName": "Naser"
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...