Ошибка анализа тела запроса HTTP POST в моей конечной точке веб-API - PullRequest
2 голосов
/ 07 июля 2019

У меня есть проект веб-API с конечной точкой POST.Я пытаюсь поразить эту конечную точку запросом в теле JSON и преобразовать его в параметр моей функции для этой конечной точки.Тем не менее, параметр в моей функции всегда нулевой.

Конечная точка почтовой функции:

[HttpPost]
[Route("PostMedia/")]
public void UpdateMedia([FromBody] Media value)
{
    string[] file = Directory.GetFiles(this.config.Value.JSONFileDirectory, value.Id.ToString() + ".json");
    if (file.Length == 1)   
    {
        try
        {
            using (StreamReader reader = new StreamReader(file[0]))
            {
                string json = reader.ReadToEnd();
            }
        }
        catch (Exception e)
        {
            throw new Exception("Could not parse file JSON for ID: " + value.Id.ToString(), e);
        }
    }
}

Класс модели My Media и его родительский каталог CatalogBase:

public class Media : CatalogueBase
{
    MediaType type;
    MediaRating rating;
    string genre;

    public MediaType Type { get => type; set => type = value; }
    public MediaRating Rating { get => rating; set => rating = value; }
    public string Genre { get => genre; set => genre = value; }
}

public abstract class CatalogueBase
{
    string name;
    string description;
    int id;

    public string Name { get => name; set => name = value; }
    public string Description { get => description; set => description = value; }
    public int Id { get => id; set => id = value; }
}

Запрос JSON Я использую мой API:

{
    "Media" : {
        "Id": 1,
        "Name": "Gettysburg",
        "Description": "A movie set during the American Civil War",
        "Type": "Movie",
        "Rating": "Excellent",
        "Genre" : "Drama"
    }
}

Происходит то, что я бью свою конечную точку, но параметр (Media value) всегда имеет значение null / значение по умолчанию.На самом деле он ничего не заполняет данными из тела запроса POST, который я посылаю почтальону.Есть идеи, почему мой модельный класс не заполняется фреймворком?

Так выглядит параметр модели в отладчике:

Model Parameter in Debugger

1 Ответ

3 голосов
/ 07 июля 2019

Связыватель модели не может сопоставить входящий JSON с определением класса.

Либо удалите корневой объект из JSON, чтобы он соответствовал объектной модели

{ 
    "Id": 1,
    "Name": "Gettysburg",
    "Description": "A movie set during the American Civil War",
    "Type": "Movie",
    "Rating": "Excellent",
    "Genre" : "Drama" 
}

Или обновите желаемую модель, чтобы она соответствовала отправленному JSON.

public class MediaUpdateModel {
    public Media Media { get; set; }
}

и используйте это для действия

public void UpdateMedia([FromBody] MediaUpdateModel value) {
    var media = value.Media;

    //...
}

Ссылка Связывание модели в ASP.NET Core

...