C# AspNetCore WebApp. Настройка байндинга для POST запроса

154
13 декабря 2018, 17:10

Если у меня есть модель данных в которой есть св-во представленное абстрактным классом. Если я возвращаю ответ GET запросом, то JSON сериализатор рабоатет корректно. Если я этот JSON передаю в POST запросе, то привязка не может понять какой объект я передал для абстрактного класса и в итоге в метод прилетает null.

public class ExchangeOptionDto
{
    public int Id { get; set; }
    public string Key { get; set; }
    public bool AutoStartCycleFunc { get; set; }        
    public ProviderBaseDto Provider { get; set; }
}
public abstract class ProviderBaseDto
{
    public string Name { get; set; } 
}
public class ManualProviderDto : ProviderBaseDto
{
    public string Address { get; set; }
    public int TimeRespone { get; set; }
}
public class ByRulesProviderDto : ProviderBaseDto
{
    public List<RuleDto> RulesDto { get; set; }
}
public class RuleDto
{
    public string Name { get; set; }
    public string Format { get; set; }
    public RequestDto Request { get; set; }    
    public ResponseDto Response { get; set; }
}

RequestDto и ResponseDto - не привожу (POCO классы)

GET метод контроллера:

[HttpGet]
public ExchangeOptionDto Get()
{
    var exch = new ExchangeOptionDto
    {
        Id = 1,
        Key = "Exch_1",
        AutoStartCycleFunc = true,
        Provider = new ManualProvider
        {
            Name = "VidorBase",
            Address = "41",
            TimeRespone = 1000
        }
    };
    return exch;
}

JSON:

{
        "id": 1,
        "key": "Exch_1",
        "autoStartCycleFunc": true,
            "provider": {
            "address": "41",
            "timeRespone": 1000,
            "name": "VidorBase"
        }
    }

Если этот же JSON передать в теле POST запроса то будет null.

[HttpPost]
    public void Post([FromBody]ExchangeOptionDto value)
    {
        var exch = value;  
    }

Я так понимаю, в качестве DTO нужно передавать только POCO объекты? Или, как то можно настроить поведение привязки для конкретного типа DTO?

READ ALSO
ReactiveUI синхронный вызов ReactiveCommand вызывает System.InvalidOperationException

ReactiveUI синхронный вызов ReactiveCommand вызывает System.InvalidOperationException

Предположим у меня есть Button с привязкой к команде ViewModelВо ViewModel я пишу:

155
Из Visual Studio не создается бд FireBird

Из Visual Studio не создается бд FireBird

Не получается из VS подключиться к бд

142
Подсказка внутри DataGrid wpf

Подсказка внутри DataGrid wpf

при создании новой строки я установил в ячейку подсказку с текстом с помощью XAML стиля FallbackValue=Name, цвет подсказки стандартный черный, возможно...

126
C# DataGridView изменяет обьект в другой форме

C# DataGridView изменяет обьект в другой форме

Почему всегда изменяется (если изменять)

164