У меня есть следующий контроллер:
[Route("xapi/statements")] << -- NOTICE THE ROUTE
[Produces("application/json")]
public class StatementsController : ApiControllerBase
С помощью следующих действий
/// <summary>
/// Stores a single Statement with the given id.
/// </summary>
/// <param name="statementId"></param>
/// <param name="statement"></param>
/// <returns></returns>
[AcceptVerbs("PUT", "POST", Order = 1)]
public async Task<IActionResult> PutStatement([FromQuery]Guid statementId, [ModelBinder(typeof(StatementPutModelBinder))]Statement statement)
{
await _mediator.Send(PutStatementCommand.Create(statementId, statement));
return NoContent();
}
/// <summary>
/// Create statement(s) with attachment(s)
/// </summary>
/// <param name="model"></param>
/// <returns>Array of Statement id(s) (UUID) in the same order as the corresponding stored Statements.</returns>
[HttpPost(Order = 2)]
[Produces("application/json")]
public async Task<ActionResult<ICollection<Guid>>> PostStatements(StatementsPostModelBinder model)
{
ICollection<Guid> guids = await _mediator.Send(CreateStatementsCommand.Create(model.Statements));
return Ok(guids);
}
Действия выполняются в следующем порядке:
1. PutStatement
2. PostStatements
Но PutStatement должен запускаться только в том случае, если указан параметр StatementId. Это не тот случай.
Я использую 2 связывателя модели для анализа содержимого потоков как application / json или multipart / form-data, если у операторов есть какие-либо вложения.
1. StatementPutModelBinder
2. StatementsPostModelBinder
Как предотвратить выполнение действия, если не указан параметр StatementId?
Например. / xapi / reports / => Хиты PutStatement