【发布时间】:2021-03-27 22:19:37
【问题描述】:
我有一个关于 Asp.net Web Api 2 的项目。在测试其中一个端点时,我遇到了 .net 框架的一种有趣行为。
这是端点的简化版本:
[Route("api/v1/bookings/documenttype/{clientId}/{companyCode}/{year}")]
[HttpGet]
[ResponseType(typeof(IEnumerable<UserVoucherType>))]
public IHttpActionResult GetUserDocumentTypes(int clientId, string companyCode,
int year, [FromUri] int? month = null)
{
//Do Some work
return Ok();
}
这里的问题是当我发送一个非整数值作为 'month' 参数的值而不是收到错误请求或类似的东西时,我在运行时得到 null,这会导致问题。例如,端点的一个消费者正在发送 '[1,2,3]' 并获取全年的所有数据,而不是收到错误消息。
例如,对于这个请求,我得到的值低于我在 ss 上指出的值: http://localhost:64652/api/v1/bookings/documenttype/1/0001/2019?month=[1,2,3]
现在我的问题是,我如何才能针对这样的案例返回错误的请求。
月份参数是可选的,我无法在端点上理解消费者是否故意发送此参数为空,或者他们发送的参数值无效。
有这个设置吗?我正在考虑编写一个自定义参数活页夹,但这不是过度工程吗?我认为框架的行为应该是默认返回错误请求还是我遗漏了什么?
【问题讨论】:
-
你应该验证用户的输入,如果失败你可以返回 badrequest,阅读这里如何返回错误请求stackoverflow.com/a/10734690/1638261
-
@jomsk1e 我该如何验证参数,它正在变为空,这也可能是正常行为,因为它是可选参数,我在端点上无法理解的问题是有人真的发送月份参数null 或发送错误的值并变为 null。
标签: c# .net rest asp.net-web-api2