验证 Action 的参数类型并发送自定义 BadRequest “[Field] 不是数字”

Posted

技术标签:

【中文标题】验证 Action 的参数类型并发送自定义 BadRequest “[Field] 不是数字”【英文标题】:Validate parameter type of Action and send custom BadRequest "The [Field] is not number" 【发布时间】:2020-01-20 12:15:53 【问题描述】:

Put Action 使用参数类型 int 定义,我需要在发送字符串时响应自定义 BadRequest 消息,此响应应仅针对一个 Controller

        [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) 消息应该是:“运输区域 ID 不是数字” 如何在到达 Controller 并发送自定义 BadRequest 对象之前验证类型?

【问题讨论】:

问题是什么? 首先它不是一个发布请求。其次,您可以使用模型作为 post 方法而不是参数,并且您可以在其中识别模型中每个属性的自定义验证器。 是的,我想改成一个模型,但它是这样定义的 【参考方案1】:

使用 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)



【讨论】:

自定义的badrequest如何发送? @alvan return BadRequest("The Shipping Region ID is not a number"); 在哪里?无论如何,我使用这样的 ActionFilterAttribute 解决了它:***.com/a/53159746/5125093 @alvan 这也可以是另一种方法。很高兴你找到了它,它对你有用。您能否将我的上述解决方案标记为答案。 抱歉,没用

以上是关于验证 Action 的参数类型并发送自定义 BadRequest “[Field] 不是数字”的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义类型的 useAppDispatch 挂钩时,获取“类型为 'AsyncThunkAction<*> 的参数不可分配给类型为'Action<any>”的参数

Struts2自定义返回Json类型result

如何将自定义参数与保留事件一起发送到 Firebase 分析

想必大家在做参数验证的时候,都会遇到一个问题,就是如何验证枚举? 自定义annotation 自定义Validator

wordpress 自定义帖子类型中的字段验证和显示错误

struts2自定义转换器