c# - 使用路由约束时,如果路由参数验证失败,为什么 API 返回 404 而不是 400
问题描述
我有一个 .NET Core Web API 项目,想在运行业务逻辑之前验证路由参数。鉴于此示例端点
[HttpGet("{username:maxlength(30)}")]
public async Task<ActionResult<object>> GetUser([FromRoute] string username)
{
// ...
}
用户名永远不会超过 30 个字符。当使用超过 30 个字符的用户名调用端点时,API 将以 404 响应进行响应。我希望 400 带有类似的消息
“用户名”必须大于 0 且小于 31 个字符
我错了吗?这有什么原因吗?
解决方案
路由约束用于消除相似路由的歧义,如果约束用于输入验证,无效输入会导致 404 Not Found 响应。
如评论中所述,要为无效输入生成 400 Bad Request,一些内置属性(例如StringLength
etc)可以帮助实现要求。
推荐阅读
- python - 如何使用python“For”循环打印数字序列
- c# - 列表框水平滚动不会包裹整个文本块
- c - 这是将元素添加到数组的正确方法吗?
- git - Gitlab CI 和 Git 部分克隆
- ios - 使用 Cordova iOS 6.0.0 构建的应用程序支持 iOS 10.3
- codeigniter - 试图理解为什么 curl 调用在 codeigniter 应用程序上很慢
- python - Python:TypeError:“numpy.int64”对象不可迭代
- node.js - 可以同时使用 getUserMedia 和 getDisplayMedia
- haskell - Haskell“堆栈”如何与 Windows 上的“msys2”交互?
- javascript - 如何从 Firefox 中捕获选择的已保存用户名密码