Можно ли привязать значения из маршрута URL и тела к одной и той же модели во время запроса на публикацию?
Например:
[Route("test")]
public class TestController : ControllerBase
{
[HttpPost("{valueFromRoute}/post")]
public IActionResult Post(Model model)
{
return new JsonResult(model);
}
}
public class Model
{
[FromRoute]
public string ValueFromRoute { get; set; }
[FromBody]
public string ValueFromBody { get; set; }
}
Я бы хотел назвать эту конечную точку следующим образом:
![enter image description here](https://i.stack.imgur.com/iHXr3.png)
Однако, используя этот код, заполняется только ValueFromRoute
:
{
"valueFromRoute": "some-route-value",
"valueFromBody": null
}
Я предполагаю, что ответ, вероятно, "нет", и что нужно использовать две отдельные модели, такие как :
[Route("test")]
public class TestController : ControllerBase
{
[HttpPost("{valueFromRoute}/post")]
public IActionResult Post([FromRoute] RouteModel routeModel, [FromBody] BodyModel bodyModel)
{
return new JsonResult(new
{
ValueFromRoute = routeModel.ValueFromRoute,
ValueFromBody = bodyModel.ValueFromBody
});
}
}
public class RouteModel
{
public string ValueFromRoute { get; set; }
}
public class BodyModel
{
public string ValueFromBody { get; set; }
}
Вызов этого точно так же, как на скриншоте выше, работает, как и ожидалось, заполняя оба значения для их соответствующих объектов и выводя следующее:
{
"valueFromRoute": "some-route-value",
"valueFromBody": "Some value from body"
}
Итак, я есть потенциальное решение, но это не мое предпочтительное решение. В идеале я хотел бы связать значения маршрута и тела для одной и той же модели, если это возможно.