MVC C # API - возвращает RootObject с атрибутом list вместо простого возврата списка - PullRequest
0 голосов
/ 26 апреля 2018

Я добавляю контроллер API в приложение MVC для повторной настройки данных JSON

В моем приложении у меня есть класс под названием Album:

public class Album
{
public int Id { get; set; }
public string AlbumName { get; set; }
public int YearReleased { get; set; }
public string AlbumInfo { get; set; }
public string imgAlbumCover { get; set; }
}

Моя база данных содержит таблицу из нескольких объектов Альбома

Я создал контроллер API для возврата этого списка альбомов в формате Json.

Я добавил следующий код в WebApiConfig.cs, чтобы вернуть JSON вместо XML:

using System.Net.Http.Headers;




GlobalConfiguration.Configuration.Formatters
.JsonFormatter.MediaTypeMappings.Add 
(new System.Net.Http.Formatting.RequestHeaderMapping("Accept",
                          "text/html",
                          StringComparison.InvariantCultureIgnoreCase,
                          true,
                          "application/json"));

Когда я выполняю вызов API альбомов в браузере, возвращается список объектов Album в формате JSON.

Вместо того, чтобы возвращать список альбомов, я бы хотел перенастроить RootObject, у которого есть 1 свойство с именем Albums, где Albums - это список объектов Album. Есть ли способ сделать это в контроллере? Я не хочу создавать новый класс RootObject.

Ниже приведен код моего контроллера API:

 namespace Music.Controllers.API
 {
    public class AlbumsController : ApiController
     {
      private MusicContext db;

      public AlbumsController()
      {
        db = new MusicContext();
      }


      public IEnumerable<Album> GetAlbums()
      {
        return (db.Albums.ToList());
      }

    }
  }

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Измените тип возврата GetAlbums на HttpResponseMessage и измените оператор возврата на

return Request.CreateResponse(HttpStatusCode.OK, new {Albums = db.Albums.ToList() });

Таким образом, вам не нужно создавать новый класс.

Полный код:

namespace Music.Controllers.API
 {
    public class AlbumsController : ApiController
     {
      private MusicContext db;

      public AlbumsController()
      {
        db = new MusicContext();
      }

      public HttpResponseMessage GetAlbums()
      {
        return Request.CreateResponse(HttpStatusCode.OK, new {Albums = db.Albums.ToList() });
      }

    }
  }
0 голосов
/ 26 апреля 2018

Затем создайте модель представления как таковую и верните то же самое, что и

public class AlbumListResponseModel
{
 public IEnumerable<Album> Albums { get; set; }
}

 public async Task<IActionResult> GetAlbums()
  {
    AlbumListResponseModel model = new AlbumListResponseModel
     {
         Albums = db.Albums;
     } 
    return OK(model);
  }

Если вы используете WEB API 2.0, тогда рассмотрите возможность использования IActionResult, а не

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...