Показывая плохой запрос, посмотрите текущий код, где есть ошибка - PullRequest
0 голосов
/ 09 января 2019

Я создаю API в ядре dot-net, но обновление не работает должным образом, ниже приведен код ниже.

[HttpPut("{id}")]
    public async Task<ActionResult> Put(int id, Assignment assignment)
    {
        if (id != assignment.Id)
        {
            return BadRequest();
        }
        _learning_GpsContext.Entry(assignment).State = EntityState.Modified;
        await _learning_GpsContext.SaveChangesAsync();
        return NoContent();
    }

Код выше зависит от следующих значений сущности.

public partial class Assignment
{
    public int Id { get; set; }
    public string Uuid { get; set; }
    public DateTime? ExpectedMasteryDate { get; set; }
    public int FirstRange { get; set; }
    public int SecondRange { get; set; }

    public int GroupType { get; set; }
    public int LearningStrategyId { get; set; }
    public int TeachingStrategyId { get; set; }
    public string Name { get; set; }
    public string Uic { get; set; }
    public string Description { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public byte ExcludeWeekend { get; set; }
    public string Duration { get; set; }
    public string File { get; set; }
    public string Youtubevideourl { get; set; }
    public string Link { get; set; }
    public int Status { get; set; }

    public DateTime? CreatedAt { get; set; }
    public int? CreatedBy { get; set; }
    public DateTime? UpdatedAt { get; set; }
    public int? ModifiedBy { get; set; }

    public int AssignmentTypeId { get; set; }
    [ForeignKey("AssignmentTypeId")]
    public AssignmentType AssignmentType { get; set; }

    public int LessonId { get; set; }
    [ForeignKey("LessonId")]
    public Lesson Lessons { get; set; } 
}

Невозможно получить значение, и оно всегда будет перенаправлено и отображает неверный запрос. Ошибка потока отображается при запуске через «чванство».

{ "examples.units.course.department.govtSchoolSystems.country.schoolSystems [0] .id": [ "Не удалось создать экземпляр типа DataLibrary.Data.SchoolSystemModel.SchoolSystems. Тип является интерфейсом или абстрактным классом, и его экземпляр не может быть создан. строка 154, позиция 23. " ], "courses.units.course.department.privateSchoolSystems.country.schoolSystems [0] .id": [ "Не удалось создать экземпляр типа DataLibrary.Data.SchoolSystemModel.SchoolSystems. Тип является интерфейсом или абстрактным классом и не может быть создан. линия 271, позиция 23. " ] } * +1010 *

1 Ответ

0 голосов
/ 09 января 2019

Прежде всего вы должны удалить частичное из класса Assignment, если хотите иметь возможность использовать его в своем методе put.

Во-вторых, вам не хватает атрибута.

FromBody

Указывает, что параметр или свойство должны быть связаны с использованием тела запроса.

Когда вы используете атрибут FromBody, вы указываете, что данные поступают из тела запроса, а не из URL / URI запроса. Вы не можете использовать этот атрибут с HttpGet запросами, только с запросами PUT, POST и Delete. Также вы можете использовать только один тег атрибута FromBody для каждого метода действия в Web API (если это изменилось в ядре mvc, я не смог бы найти что-либо, поддерживающее это).

FromRouteAttribute

Сводка: указывает, что параметр или свойство должны быть связаны с использованием данных маршрута из текущего запроса.

По сути, он FromRoute будет смотреть на параметры вашего маршрута и извлекать / связывать данные на основе этого. Поскольку маршрут, когда вызывается извне, обычно основан на URL. В предыдущих версиях веб-API это сопоставимо с FromUri.

public async Task<ActionResult> Put([FromRoute] int id, [FromBody] Assignment assignment)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...