Azure Functions路由绑定如何匹配含斜杠的未知URL后缀
问题根因
Azure Functions HTTP触发器路由底层复用ASP.NET Core路由规则,普通路由参数(比如你现在写的{restOfUrl})默认只匹配单段无斜杠的路径片段,只要剩余路径里带额外正斜杠,就会匹配失败返回404。
修复方案
用catch-all通配路由参数捕获包含斜杠的多段路径,只要给最后一个路由参数名前面加*前缀即可,修改后的路由配置项为:
"route": "{param1}/customer/{param2}/{*restOfUrl}"
修改完成后的完整function.json配置如下:
{ "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "route": "{param1}/customer/{param2}/{*restOfUrl}", "name": "req", "methods": [ "get" ] }, { "type": "http", "direction": "out", "name": "res" } ], "scriptFile": "../dist/src/handlers/myScript.js" }
使用说明
- 带
*前缀的通配参数必须放在路由模板的最末尾,放在中间位置会导致路由规则解析报错 - 该参数会捕获从对应位置开始到URL末尾的所有内容,包含任意数量的正斜杠,捕获到的是完整字符串,需要拆分多段的话可以在业务代码里自己按
/分割 - 即使URL在
{param2}之后没有剩余内容,这个规则也能正常匹配,此时restOfUrl的取值为空字符串
匹配效果对照
| 实际请求路径 | restOfUrl参数取值 | 匹配状态 |
|---|---|---|
...123/customer/456/rest-of-url | rest-of-url | 正常命中 |
...123/customer/456/rest/of/url | rest/of/url | 正常命中,无404 |
...123/customer/456/path/with/many/slashes | path/with/many/slashes | 正常命中 |
...123/customer/456 | 空字符串 | 正常命中 |
内容的提问来源于stack exchange,提问作者nt95
相关产品推荐
相关产品推荐

