Я создаю микросервис веб-API с использованием Core 3. У меня есть класс, определенный следующим образом:
public class UserSourceList
{
[JsonIgnore]
public string UserId { get; set; }
[JsonIgnore]
public string ListId { get; set; }
public string Name { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public ListTypes ListType { get; set; }
public List<string> Ids { get; set; }
public DateTimeOffset CreationTime { get; set; }
}
Когда платформа пытается связать данные, предоставленные HTTP PUT
, она будетне заполняет поля UserId
и ListId
.В результате привязка модели завершается ошибкой во время проверки и возвращает HTTP 400
, в котором говорится, что требуются UserId
и ListId
.
Метод действия контроллера определяется следующим образом:
[HttpPut("{userId:userid}/{listId:listid}", Name = "ReplaceUserList")]
public ActionResult Replace(string userId, string listId, UserSourceList model)
{
return Ok(_listManager.ReplaceUserList(model.UserId, model.ListId, model));
}
Типичный вызов API будет выглядеть примерно так:
PUT /api/v1/listmgmt/abc123def456/c788f2f7b7984424910726d4a290be26
PUT
Body
{
"name": "Test",
"listType": "Eans",
"ids": ["97814571867716", "9781430257615", "9780982550670"],
"userId":"abc123def456",
"listId":"c788f2f7b7984424910726d4a290be26"
}
Если я удалил атрибут JsonIgnore
из UserId
и ListId
свойств модели, все связывается, как и ожидалось.
Ожидается ли поведение, что привязка модели будет игнорировать поля, помеченные JsonIgnore
?
Я знаю, что могу обойти этоизменив, как работает мой код проверки, или я могу разделить свою модель.Я хотел бы понять текущее поведение, поскольку оно отличается от того, что я ожидал и испытал с ASP.NET MVC 4 и WebApi 2.
Спасибо