Я пытаюсь создать объект со всеми соответствующими данными из привязанного запроса.
Представьте себе такое действие
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
И модель могла быть такой
public class PostRequest
{
[FromRoute]
public int Id { get; set; }
[FromHeader]
public string SomeHeader { get; set; }
[FromBody]
public int Foo { get; set; }
[FromBody]
public string Bar { get; set; }
[FromBody]
public string Baz { get; set; }
}
К сожалению, несколько [FromBody]
не допускаются.
Если бы это было разрешено и работало так, как ожидалось, я мог бы реализовать такой общий контроллер CRUD
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
{
var command = _mapper.Map<TCommand>(model); // AutoMapper
await _mediator.Send(command); // MediatR
// omitted for brevity
return Created();
}
Очевидно, это выглядело бы иначе.
Идея состоит в том, чтобы удалить из контроллера всю логику, которая не связана с API / MVC. Итак, все, что делает контроллер, это
Теперь у меня есть одна реализация для всех потребностей моего CRUD-контроллера - и я очень обрадовался!
Это не обязательно должно быть [FromBody]
это может быть другой атрибут. Например, [FromBodyPart]
, [BindFromBody]
или что-то совершенно другое.
Было бы это возможно?
Спасибо за ваш запрос функции. Мы рассмотрим эту функцию в течение следующего периода планирования выпуска и соответствующим образом обновим статус этой проблемы.
Я думаю, это было бы решением моего вопроса SO, на который я до сих пор не ответил:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property
Спасибо что связались с нами.
После переоценки этого вопроса мы решили не предоставлять такую функцию, поскольку она не соответствует принципам, которым мы пытаемся следовать в структуре.
Самый полезный комментарий
Спасибо за ваш запрос функции. Мы рассмотрим эту функцию в течение следующего периода планирования выпуска и соответствующим образом обновим статус этой проблемы.