.NetCore 3 Web API: исключить объекты модели из ответа контроллера

Я изучаю основы веб-API .NetCore 3 и создаю с его помощью базовое приложение, и я застрял с этим вопросом.

У меня есть модель с внешним ключом, которая выглядит так:

public class Rule
{
        public long Id { get; set; }

        public long CategoryId { get; set; }
        public Category Category { get; set; }

        [Required]
        [StringLength(50)]
        public string Keyword { get; set; }
}

Я могу POST новые правила, просто передав CategoryId идентификатор. Но когда я делаю запрос GET, я получаю как атрибут FK (CategoryId), так и объект Category, на который ссылаются только для целей навигации. Пример ответа на запрос:

{
    "id": 1,
    "categoryType": "Expense",
    "categoryId": 2,
    "category": null,
    "keyword": "TEST"
}

Есть ли простой / быстрый способ исключить отображение элементов модели контроллером? Используете DataAnnotations, Fluent API или просто конфигурацию сервиса?

Кстати, я тоже подаю в суд на EFCore.

Спасибо.


person Carlos    schedule 16.12.2019    source источник
comment
Вы можете получить объект Category, только если вы Include или если он был загружен в контекст раньше. Как вам Get Rule? (Код).   -  person Gert Arnold    schedule 16.12.2019
comment
В этом случае я хочу, чтобы объект Category был исключен из ответа json.   -  person Carlos    schedule 17.12.2019
comment
Да, я имею в виду: вы сами стали причиной включения объекта. EF не сделает этого спонтанно.   -  person Gert Arnold    schedule 17.12.2019
comment
Вы используете AutoMapper или другую библиотеку картографии или нет?   -  person Matt U    schedule 17.12.2019


Ответы (1)


Один из способов - создать объект JSON вручную с помощью JSON Convert.

return JsonConvert.SerializeObject(new
            {
               id = rule.id,
               //more fields as needed...

            });
person Community    schedule 16.12.2019