ASP.NET Core Web API端点异常:UUID参数触发错误端点问题
问题原因解析
这是ASP.NET Core路由匹配机制的正常表现,核心原因在于路由匹配仅依据请求的路径部分,查询参数不会参与路由的匹配判断,具体拆解如下:
1. 各端点的路由模板匹配规则
你的ApplicationController路由前缀是api/[controller](即api/Application),三个Get端点的实际路由模板分别是:
GetApplications:api/Application([HttpGet]未指定额外路由模板,直接继承控制器前缀)GetApplicationById:api/Application/{id:int}(路径中包含必须为整数的id占位符)GetApplicationByUUID:api/Application/{uuid}(路径中包含字符串类型的uuid占位符)
2. 请求路径的匹配逻辑
当你发起https://localhost:3333/api/Application?uuid=123asd-123asdasd-wqeasdad请求时:
- 请求的路径部分是
api/Application,和GetApplications的路由模板完全精确匹配 - ASP.NET Core的路由系统会优先选择完全匹配路径的端点,不会因为查询参数里有
uuid就去匹配GetApplicationByUUID(因为该端点要求路径必须包含/xxx形式的占位符部分)
而当你用https://localhost:3333/api/Application/123asd-123asdasd-wqeasdad请求时,路径部分是api/Application/123asd-123asdasd-wqeasdad,正好匹配GetApplicationByUUID的api/Application/{uuid}模板,所以会触发正确的端点。
3. 额外说明:查询参数的作用
查询参数仅用于参数绑定,不会影响路由匹配。即使GetApplications的PaginationParameters类中没有uuid属性,ASP.NET Core也只会忽略这个查询参数,不会因此切换到其他端点。
内容的提问来源于stack exchange,提问作者Florent
相关产品推荐
相关产品推荐

