Проверьте тип параметра Action и отправьте пользовательский BadRequest «[Поле] не является числом» - PullRequest
0 голосов
/ 19 сентября 2019

Операция Put определяется с параметром типа int, и мне нужно отвечать на пользовательское сообщение BadRequest при отправке строки вместо этого, этот ответ должен быть только для одного контроллера

        [HttpPut("address")]
        [Authorize]
        [ProducesResponseType(typeof(Customer), 200)]
        [ProducesResponseType(typeof(Error), 400)]
        [ProducesResponseType(typeof(Error), 404)] //custom error
        [ProducesDefaultResponseType]
        public async Task<IActionResult> UpdateAddress(
            [Required] [FromForm] string email,
            [Required] [FromForm] string address_1,
                       [FromForm] string address_2,
            [Required] [FromForm] string city,
            [Required] [FromForm] string region,
            [Required] [FromForm] string postal_code,
            [Required] [FromForm] string country,
            [Required] [FromForm] int shipping_region_id //this is the parameter to validate
        )
        {
           //...
        }

BadRequest (400) сообщение должно быть: «Идентификатор региона доставки не номер». Как я могу проверить тип, прежде чем обратиться к контроллеру и отправить пользовательский объект BadRequest?

1 Ответ

2 голосов
/ 19 сентября 2019

Используйте DTO для запроса PUT и передайте свой параметр следующим образом.

public class UpdateAddressDTO
{
        [Required]
        public string email { get; set; }
        [Required]
        public string address_1 { get; set; }
        [Required]
        public string address_2 { get; set; }
        [Required]
        public string city { get; set; }
        [Required]
        public string region { get; set; }
        [Required]
        public string postal_code { get; set; }
        [Required]
        public string country { get; set; }
}

[Route("address/{shipping_region_id}/update")]
public async Task<IActionResult> UpdateAddress([FromUri]int shipping_region_id, [FromBody]UpdateAddressDTO model)
{

}
...