Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果使用路由约束时路由参数验证失败,为什么API会返回404而不是400_C#_Asp.net Core_.net Core_Asp.net Core Webapi - Fatal编程技术网

C# 如果使用路由约束时路由参数验证失败,为什么API会返回404而不是400

C# 如果使用路由约束时路由参数验证失败,为什么API会返回404而不是400,c#,asp.net-core,.net-core,asp.net-core-webapi,C#,Asp.net Core,.net Core,Asp.net Core Webapi,我有一个.NET核心Web API项目,希望在运行业务逻辑之前验证路由参数。给定此示例端点 [HttpGet("{username:maxlength(30)}")] public async Task<ActionResult<object>> GetUser([FromRoute] string username) { // ... } [HttpGet({username:maxlength(30)})] 公共异步任务GetUser([

我有一个.NET核心Web API项目,希望在运行业务逻辑之前验证路由参数。给定此示例端点

[HttpGet("{username:maxlength(30)}")]
public async Task<ActionResult<object>> GetUser([FromRoute] string username)
{
    // ...
}
[HttpGet({username:maxlength(30)})]
公共异步任务GetUser([FromRoute]字符串用户名)
{
// ...
}
用户名永远不会超过30个字符。当使用超过30个字符的用户名调用端点时,API将以404响应进行响应。我希望有一个400,上面有这样的信息

“用户名”必须大于0且小于31个字符


我错了吗?有什么原因吗?

路由约束用于消除类似路由的歧义,如果约束用于输入验证,则404 Not Found响应中的输入结果无效

有关更多信息,请检查:


要为无效输入生成400错误请求,如注释中所述,一些内置属性(如
StringLength
等)可以帮助实现该要求。

错误404表示URL地址错误,而400表示请求中的参数错误。查询URL有时会有一个表示参数的问号。因此,400错误表示错误在问号之后。请尝试使用数据annotations@jbooker你是说像这样<代码>[FromRoute][Range(1,30)]字符串用户名我认为对于路由参数,这应该很好
[MaxLength(30)]