验证 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如何发送? @alvanreturn BadRequest("The Shipping Region ID is not a number");
在哪里?无论如何,我使用这样的 ActionFilterAttribute 解决了它:***.com/a/53159746/5125093
@alvan 这也可以是另一种方法。很高兴你找到了它,它对你有用。您能否将我的上述解决方案标记为答案。
抱歉,没用以上是关于验证 Action 的参数类型并发送自定义 BadRequest “[Field] 不是数字”的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义类型的 useAppDispatch 挂钩时,获取“类型为 'AsyncThunkAction<*> 的参数不可分配给类型为'Action<any>”的参数
如何将自定义参数与保留事件一起发送到 Firebase 分析